原码,反码,补码笔记
学习计算机组成原理的时候学过这个,结果今天看了一道LeetCode的习题,发现自己补码怎么算的都给忘了,罪过罪过,于是乎就搜了相关资料回忆了下,以下这篇文章写得很好,想记录下来方便以后查看。
http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
这里简要概述下:
1. 原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
2. 反码:
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3. 补码:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补