有符号数据表示法
·在计算机呢内,有符号数有3种表示法:原码、反码、补码。所有数据的运算都是采用补码进行的。
·原码,就是二进制定点表示法,及最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
·反码,整数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
·补码,整数的补码与其原码相同;负数的补码是在其反码的末位加1.。
我们通常在用计算机的时候只知道3+7=10,但你不知道是计算机怎么运算的。计算机在操作的时候,都是采用数据对应的二进制的补码来计算的。
我准备用原码,反码,补码来分别表示+7,-7.
首先我们得出7的二进制:111。
原码:
符号位 数值位
+7 0 0000 111
-7 1 0000 111
最高位为符号位,“0”表示正,“1”表示负,所以+7是0,-7就是1,其他是数值位。他们之间最大的区别就是符号位不相同。我是用一个字节来表示,上面只有4位,所以还要补齐4位凑齐8个字节。在其前面补4个0.
反码:
正数的反码与原码相同。负数的反码与原码是符号位不变,数值位取反,就是1变0,0变1.。
符号位 数值位
+7 0 0000 111
-7 1 1111 000
补码:
正数的补码与原码相同。负数的补码是在反码的基础上加1。要想得到补码先要有原码然后得出反码,最后在得出补码。
符号位 数值位
+7 0 0000 111
-7 1 1111 001
以上就是-7和+7在内存的真实存储就是这样的。正数的原、反、补都是一样的,变化的是负数。
下面来两个练习
1.已知某数X的原码为1011 0100B,试求X的补码和反码。
2.已知某数X的补码1110 1110B,试求其原码。
1.
原码:1011 0100,首先要把它分开,分成符号位和数值位。
符号位 数值位
原码: 1 011 0100
反码: 1 100 1011
补码: 1 100 1100
最后这个补码有一点要注意(这是二进制,逢二进一),在末位上加1,这里的1+1=2,所以它要进一位变成0,前面这里也是1它加1也是2,所以也要变成0,最后就变成了100 1100。
2.
这里和上面也是一样,首先把它分开。
符号位 数值位
补码: 1 1101 110
反码: 1 1101 101
原码: 1 0010 010