二进制
我们常用的十进制是「逢十进一」的,我们只需要使用0、1、2、3、4、5、6、7、8、9这10个数字符号,
就能表示所有的自然数。与此类似,二进制是「逢二进一」的进位制,它只需要使用0、1这两个数字符号,就能表示所有的自然数。
例如
0000 0000(二进制) 表示 0(十进制)
0000 0001(二进制) 表示 1(十进制)
0000 0111(二进制) 表示 7(十进制)
11111111(二进制) 表示 255(十进制)
正数的原码 反码 补码都是本身
负数的 反码:先取绝对值,保留第一位符号位,剩余的取反;
补码:在反码的基础上 最后一位加一;
注意:0的反码、补码都为
在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将
符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将
符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将
符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
在C中 对于溢出的数据
C语言的整型溢出,分为无符号整型溢出和有符号整型溢出。 对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。如: 1.unsigned char x = 0xff; 2.printf("%dn", ++x); 上面的代码会输出:0 (因为0xff + 1是256,与2^8求模后就是0) 对于signed整型的溢出,C的规范定义是“undefined behavior”,也就是说,编译器爱怎么实现就怎么实现。
在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将
符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃