【深入理解计算机系统】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)

相关文章
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践
|
存储 C语言
使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小
【10月更文挑战第13天】使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。
800 1
|
安全
计算机硬件升级增加内存(RAM)
【8月更文挑战第5天】
2509 3
|
TensorFlow 算法框架/工具
Tensorflow error(二):x and y must have the same dtype, got tf.float32 != tf.int32
本文讨论了TensorFlow中的一个常见错误,即在计算过程中,变量的数据类型(dtype)不一致导致的错误,并通过使用`tf.cast`函数来解决这个问题。
305 0
|
存储 固态存储 芯片
计算机中内存与存储
【7月更文挑战第28天】
3917 1
|
存储 数据处理 索引
数据类型转换:int()、str()、float()
在Python中,数据类型转换是一项基础且重要的操作
|
存储 C语言
计算 int, float, double 和 char 字节大小
计算 int, float, double 和 char 字节大小。
505 3
|
存储 缓存 调度
计算机内存
计算机内存
158 0
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考

热门文章

最新文章