【C语言】原码、反码和补码之间的区别及转换计算

总结:

【C语言】原码、反码和补码之间的区别及转换计算_第1张图片
这里补充讲解一下原码:

原码

原码就是用左边第一位表示符号, 其余位表示绝对值. 符号位:正数为0,负数为1.比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]

[-127 , 127],
原码是人脑最容易理解和计算的表示方式.

如果数据为有符号的话,则0也会分为+0,其原码为[0000 0000]和-0,其原码为[1000 0000]。

但是-0没有实际意义,原码的-0二进制表示为1000 0000,。但是-1+(-127)用补码计算的话,得出的补码也为1000 0000,所以此补码的真值应为-128。
在这里插入图片描述
所以用补码表示数据范围时,原码真值的-0的二进制形式就成为了-128的补码二进制形式。所以用补码表示数时,其真值就会比原码多出一个最小负值。

使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数。

这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127],二进制表示形式[1111 1111,0111 1111];而使用补码表示的范围为[-128, 127],二进制表示形式[1000 0000,0111 1111]。

因为机器使用补码存储数字, 所以对于编程中常用到的32位int类型, 可以表示范围是:
在这里插入图片描述
因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

你可能感兴趣的:(C语言-基础知识)