其他分享
首页 > 其他分享> > 关于原码、反码、补码

关于原码、反码、补码

作者:互联网

       此次我学习了有关原码、反码、补码的知识。其实在大一上的时候,在刚刚接触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