原码、反码和补码
先看一下常见资料给出的定义:(8位整型)
原码:-127~127
一个二进制数左边加上符号位后所得的码。最高位为符号位,"0"表示正,"1"表示负。
反码:-127~127
正数的反码——与原码相同。
负数的反码——符号位为“1”,数值部分按位取反。
补码:-128~127
正数的补码——与原码相同。
负数的补码——将其原码除符号位之外的所有位取反后加1。即“反码+1”。
一个二进制数左边加上符号位后所得的码。最高位为符号位,"0"表示正,"1"表示负。
反码:-127~127
正数的反码——与原码相同。
负数的反码——符号位为“1”,数值部分按位取反。
补码:-128~127
正数的补码——与原码相同。
负数的补码——将其原码除符号位之外的所有位取反后加1。即“反码+1”。
原码:用于计算机处理数据、并区分正负数。
补码:用于计算机运算减法。(减一个数,变成加这个负数的补码,如:10-2 变成 10 + (-2的补码)
补码:用于计算机运算减法。(减一个数,变成加这个负数的补码,如:10-2 变成 10 + (-2的补码)
转自:https://zhuanlan.zhihu.com/p/80618244
由补码,求原码:
正数:补码和原码相同;
负数:补码先减一,得到反码,反码除符号位外,取反,再得到原码。和原码求补码的过程正好反过来;
或者,求负数补码,直接用“左右找1, 1不变,中间取反求得”就是找到该补码的左边和右边的第一个1,然后左边和右边的第一个1都不变,再把这两个1中间的数都取反,就得到其原码了;