目录
一、补码
二、负数时的有符号整型和无符号整型的转换
三、关于无符号的笔试题
一、补码
有符号数在计算机中存储,用数的最高位存放符号, 正数为0, 负数为1
例如:有符号数 1000 0011,其最高位1代表负,其真正数值是 -3,而不是形式值131(无符号数1000 0011转换成十进制等于131)
原码:
原码就是符号位加上真值的绝对值,即用第一个二进制位表示符号(正数该位为0,负数该位为1),其余位表示值。
反码:
正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。
补码:
正数的补码就是其本身;
负数的补码是在其反码的基础上+1
例如:
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
二、负数时的有符号整型和无符号整型的转换
当执行一个运算时(如这里的a>b),如果它的一个运算数是有符号的而另一个数是无符号的,那么C语言会隐式地将有符号 参数强制类型为无符号数,并假设这两个数都是非负的,来执行这个运算。
我们知道,整数在计算机中通常是以补码的形式存在的,而-1的补码(用4个字节储存)为1111,1111,1111,1111。而C语言对于强制类型转换是怎么处理的呢?对大多数C语言的实现ÿ