信息的存储
整数运算
计算机存储整数
截断
将 int 类型强制类型转换成 short 类型时,int 类型高 16 位数据被丢弃,留下低 16 位的数据,因此截断一个数字,可能会改变它原来的数值。
位移运算
左移:填充0;
逻辑右移:填充0;
算数右移:填充最高位的值。
对于无符号数,右移为逻辑右移;对于有符号数,右移为算数右移。
移动K位,K很大时:设数据类型为w位,移动位数为为w%k位。
浮点数
含有小数值的二进制数表示:
IEEE 的关于浮点数的表示:
64 位双精度浮点数,其二进制位与浮点数的关系如图所示:
- 与单精度浮点数相比,双精度浮点数的符号位也是 1 位。但是阶码字段的长度为 11 位,小数字段的长度为 52 位。
- 浮点数的数值可以分为三类:第一类是规格化的值,第二类是非规格化的值,第三类是特殊值。其中阶码的值决定了这个数是属于其中哪一类。
向偶数舍入
浮点运算
由于溢出或舍入失去精度,浮点数的加法和乘法都不具备结合性
也不具备分配性:
- C语言提供了两种不同的浮点数据类型 单精度float 类型和双精度double 类型。当int float、double 不同数据类型之行强制类型转换时得到的结果可会出我们的期。
- 当int 类型转换成float 类型时数字不会发生溢出但是可会舍入。是由于单精度浮点数的小数字段是23 位可会出现无法保留精度的情况。