信息的表示

​ 在遇到一些常见问题的时候总是遗忘基础的知识,故基于《CSAPP》的第二章“信息的表示和处理”,按照个人理解重新进行总结便于查询与复习。

数字表示

  1. 无符号unsigned编码
  2. 补码tow's-complement编码
  3. 浮点数floating-point编码

取值范围不对称 - 原码|反码|补码

image-20230520160755335

  • C语言标准并没有要求要用补码形式来表示有符号整数,但是几乎所有的机器都是这么做的。

有符号数与无符号数之间的转换

  • B2U是一个双射:无符号数编码具有唯一性
  • B2T是一个双射:补码编码具有唯一性
  • 当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制转换为无符号数。

定点数与浮点数 fixed-point & floating-point

数的表示

​ 定点数与浮点数的”点“指的是小数点。

  1. 定点数:小数点的位置是固定的,取值范围较小。
  2. 浮点数:以指数形式存储数字,直观且节省内存的增大了数的范围。

浮点数舍入与误差

模式 舍入方式
就近舍入 用最接近x的可表示的值来代替;如果x正好在两个相邻的可表示值的中间, 则首选二进制最后一位为0
向下舍入 用不大于x的可表示的值来代替 (向负无穷大方向截断)
向上舍入 用不小于x的可表示的值来代替 (向正无穷大方向截断)
向0舍入 当x>0时采用向下舍入,当x<0时采用向上舍入

​ 由于计算机无法精确表示所有的浮点数,在做浮点运算时,如果计算结果无法精确表示,此时就会产生的误差,这就是浮点运算的舍入误差。

溢出 overflow

​ 用有限数量的位来对一个数字编码,当结果太大以至不能表示时,某些运算就会溢出。

有符号整数

上溢
int x = INT_MAX;
cout << x << '\n'; // 2147483647
++x;
cout << x << '\n'; // -2147483648
下溢
int x = INT_MIN;
cout << x << '\n'; // -2147483648
--x;
cout << x << '\n'; // 2147483647

无符号整数

unsigned int ux = UINT_MAX;
cout << ux << '\n'; // 4294967295
++ux;
cout << ux << '\n'; // 0
ux = 0;
--ux;
cout << ux << '\n'; // 4294967295
posted @ 2023-05-21 01:08  z_ining  阅读(25)  评论(0编辑  收藏  举报