关于原码、反码、补码
作者:互联网
此次我学习了有关原码、反码、补码的知识。其实在大一上的时候,在刚刚接触C语言的时候我就已经接触过原码、反码、补码的知识了,但是当时因为知识的限制以及对计算机了解的浅薄,导致我没有很明白,清楚地知道为什么原码反码补码是什么关系,为什么他们只能储存这么多数,以及为什么他们之间的关系是按位取反。只知道三者表面上的关系。
那么此次学习,我在复习了原码、反码、补码之间的关系后,更着重学习了三者的内在联系,从内在中学习他们之间为什么是这种关系,从而更好地了解计算机内部构建。
首先是三者概念:
1、原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。
2、反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。
3、补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。
例如 十进制数字:5
5=2^2+2^0 101 至少要三位数字 加上符号位 就是4位数字
原码:0101
反码:0101
补码:0101
那么 十进制数字:-5
5=2^2+2^0 101 至少要三位数字 加上符号位 就是4位数字
原码:1101
反码:1010
补码:1011
从以上两个例子可以看出,取一个数的原码、反码、补码第一件事就是要将这个数用二进制表达出来、其次,靠三者的关系,第一位是符号位,1为负数,0为正数。原码只需将二进制前加一个符号位,那么反码就需要对原码按位取反,即0取1,1取0;那么补码就是在反码的基础上在最后一位加1,如果最后一位是1,那么则进一位。
比如 -42:
原码:10101010
反码:11010101
补码:11010110
此外,我了解了原码、反码、补码的表示范围:
n+1位数字,绝对值最大的原码是 -(2^n - 1)和 2^n - 1
n+1位数字,绝对值最大的反码是 -(2^n - 1) 和 2^n - 1
n+1位数字,绝对值最大的补码是 -2^n
例如
原码:
二进制无符号000~111 十进制0~ 7 0 ~ 2^3-1
二进制有符号0000~0111 十进制0~7 0 ~ 2^3-1
二进制有符号1111~1000 十进制-7~0 -(2^3-1) ~ 0
综上所述:4位原码的表示范围: -(2^3 - 1) ~ 2^3-1
用4位二进制原码表示的范围 1111~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1
用4位二进制反码表示的范围 1000~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1
用4位二进制补码表示的范围 1000~0111 可以表示16个十进制数字 -2^3 ~ 2^3-1
以上就是我对此次原码、反码、补码的进一步学习。其实掌握了规律,便也会进行运算了。
二进制转十进制
无符号二进制 十进制 加1后的二进制 加1后十进制
1 2^1 – 1 10 2^1
11 2^2 – 1 100 2^2
111 2^3 – 1 1000 2^3
1111 2^4 – 1 10000 2^4
111…… 11 n个1 2^n – 1 1000……000n个0 2^n
将原码:10101,01001 转成十进制数
10101 = -1*2^2 + 1*2^0
01001 = 1*2^3 + 1*2^0
标签:反码,符号,二进制,补码,十进制,原码 来源: https://www.cnblogs.com/joranger/p/16684789.html