负数的 二进制表示

首先理解以下概念
原码:

正数原码就是最简单的二进制表示,比如5 就是0000 0101 有八位的话
负数原码 -5 就是有最左边以为是符号位 1000 0101

如果用负数的原码表示buye 只能表示 -127~127之间的数,因为0会有两种表示方法 0000 0000 和 1000 0000这导致一个问题,只能表示255个数。即使考虑用1000 0000表示-128,又引出一个问题,+1(0000 0001)-1(1000 0001)之和为(1000 0010)不是0,结果是-2。
如何能表示-128~127个数呢,并且符合加减逻辑呢。
用负数的补码方式。
又引入反码的定义。
正数和0的原码,反码,补码都一样。
负数的反码是除符号位外其他位数取反,补码是反码加1。如
-1的原码 1000 0001,反码 1111 1110,补码1111 1111
-2的原码 1000 0010 反码 1111 1101, 补码 1111 1110
-3的原码 1000 0011 反码 1111 1100 , 补码 1111 1101
-1 + -2 = -3 在二进制中相当于直接相加,舍弃最高位。
-126 的原码 1111 1110 反码 1000 0001, 补码1000 0010
-127 的原码 1111 1111 反码1000 0000, 补码1000 0001
-128的补码就是1000 0000,对于8位,它没有反码和原码。

猜你喜欢

转载自blog.csdn.net/qq_31617121/article/details/80087107