【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记

简介: 【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记

前言:

《Computer Systems》学习笔记。


Ⅰ.  学习目的

为了培养对基础计算机系统的一般性理解,提高系统编程技能。数据表示和算术、机器级的程序表示、处理器结构、链接、控制流、虚拟内存、系统级IO、网络编程、并发编程。

Ⅱ.  举几个比较有意思的例子

0x00  例1 - Ints are not Integers

比如,对于 这个问题,

float:YES!

int :

💬 代码验证:

#include <stdio.h>
int main(void) {
    int a = 40000;
    int b = 50000;
    printf("a * a = %d\n", a * a);
    printf("b * b = %d\n", b * b);
    return 0;
}

🚩 运行结果如下:

首先 a * a (40000 * 40000)成功计算出了结果 —— 1600000000,这和我们预想的一样。

但是 b * b (50000 * 50000)计算的结果却并不是我们所预想的 2500000000,而是奇怪的 -1794967296,它计算出来的结果显然是错误的,因为其发生了溢出。

0x02 例2 - Floats are not Reals

再举个例子:    加法满足交换律与结合律。

对于 unsigned int 或 signed int 来说没啥问题。

但是对于 float 来说,情况似乎就不容乐观了:

💬 代码验证:

#include <stdio.h>
int main(void) {
    printf("(1e20 + -1e20) + 3.14 = %f\n", (1e20 + -1e20) + 3.14  );
    printf("(1e20 + -1e20) + 3.14 = %f\n", 1e20 + (-1e20 + 3.14)  );
    return 0;
}

🚩 运行结果如下:

0x03 例3 - 内存引用错误的例子(Memory Referencing Bug)

🔑 出现这种情况的原因:

 

 


参考资料:

Computer Systems: A Programmer's Perspective (3rd Edition)

相关文章
|
存储 C语言
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
【10月更文挑战第13天】使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
818 1
|
TensorFlow 算法框架/工具
Tensorflow error(二):x and y must have the same dtype, got tf.float32 != tf.int32
本文讨论了TensorFlow中的一个常见错误,即在计算过程中,变量的数据类型(dtype)不一致导致的错误,并通过使用`tf.cast`函数来解决这个问题。
318 0
|
存储 数据处理 索引
数据类型转换:int()、str()、float()
在Python中,数据类型转换是一项基础且重要的操作
|
存储 C语言
计算 int, float, double 和 char 字节大小
计算 int, float, double 和 char 字节大小。
523 3
|
存储 缓存 Java
int 和 Integer 哪一个占用更多内存?
【8月更文挑战第21天】
725 0
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
1034 0
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
243 0
|
存储
整数和浮点数在内存中存储
整数的2进制表⽰⽅法有三种,即原码、反码和补码。
285 0
|
11月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3230 0