前言
在编写程序的时候,不同数据类型进行转换和计算的时候总是可能出现各种各样奇怪的bug,所以深入的了解计算机系统中数据的表示与存储有利于我们编写高效与健壮的计算机程序,本文主要总结计算机系统中整数,浮点数的表示和存储。
真值与补码的相互转换
真值指的就是现实当中的正负数,而补码是计算机中表示真值的一种编码方式,也就是0/1编码的序列。
补码与真值的关系如下:
其中n表示机器的字长,X是真值。
求真值的补码
正数的补码为其本身,负数的补码为正数的原码各位取反加1,简便的方法为从右到左遇到的第一个1的前面各位取反。
如:假设机器数为8位,+123的补码为01111011,-123的补码为10000101。
求补码的真值
公式为:
例子:
简便求法:
符号为0,则为正数,数值部分相同,符号为1,则为负数,数值各位取反再加1.
如:01010110的真值为1010110=64+16+4+2=86. 11010110的真值为-0101001=-(32+8+2)=-42.
整数的表示
整数分别无符号数和带符号数,带符号数中编码的最高有效位为1代表为负数,为0代表为整数。对于C编译器,如果一个表达式同时存在无符号数和带符号数,则会将带符号数强制转换成无符号数。无符号数通常在一个数的后面加一个”u”或者”U”。
如下面的例子: