Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
原码、反码、补码的计算_补码原码反码怎么转换,希望能够帮助你!!!。
机器数是一个数在计算机中的二进制表示形式,机器数是带符号的,在计算机中用一个数的最高位(第一位)存放符号, 正数为0, 负数为1。例如1(带符号即+1)在计算机中的最终表示形式为 0000 0001,依此类推-1的二进制为 1000 0001。这种表示方式又叫做原码,其中0的原码为0000 0000。
注:为什么 1 是 0000 0001 而不是 0001,在计算机中最小的存储单位是字节,1个字节占8位
如果是正数,反码和原码是一样的,也就是1的原码是0000 0001,它的反码也是0000 0001.
如果是负数,反码就是在原码的基础上保持符号位不变,其它依次取反,因为-1的原码是 1000 0001,所以它的反码是 1111 1110
如果是正数,补码和原码是一样的,也就是1的原码是0000 0001,它的补码也是0000 0001.
如果是负数,补码就是在反码的基础上加1,因为-1的原码是 1000 0001,它的反码是 1111 1110,所示它的补码是1111 1111。
正数的原码、反码、补码都是一样的。
0的原码、反码、补码都是0000 0000。
负数的反码符号位表示符号的值不变,其它取反,补码在反码基础上加1。
注:计算机中的运算都是以补码的形式参与运算的!!!!!
计算机中的运算都是以补码的形式参与运算的!
按位与运算规则是:相同位都为1,则为1,否则为0。
举个例子:
例1:计算1&3的值是多少?
1的原码是0000 0001,补码为0000 0001
3的原码是 0000 0011,补码为0000 0011
通过上面的规则只有最后一位都是1(补码参与运算,后同),所以最后的结果是 0000 0001,原码也是0000 0001,也就是1,即1&3=1。
我们通过代码展示:
func main() {
a, b := 1, 3 println(a & b) }
程序最终输出结果是1。
例2:计算-1&3的值是多少?
-1原码是1000 0001,反码是1111 1110,补码是1111 1111。3的原码、反码、补码都是0000 0011。由于最后两个都是1,所以结果是 0000 0011,原码也是0000 0011,即为3。
按位或的运算规则是:只要有一个为1,则为1,否则为0。
举例:
例1:1|3结果是多少?
1的补码是0000 0001,3的补码是0000 0011,所示结果为0000 0011,原码为0000 0011,即为3。
代码:
func main() {
a, b := 1, 3 println(a | b) }
例2:-1|3的结果是多少?
-1的补码是:1111 1111,3的补码是 0000 0011,所以结果是为1111 1111,原码为1000 0001,即为-1。
按位异或的规则是:相同位相同则为0,不同则为1.
举例:
例1:1^3是多少?
1的补码是0000 0001,3的补码是0000 0011,结果是0000 0010,对应的原码是0000 0010,即为2。
例2:-1^3的结果是多少?
-1的补码是:1111 1111,3的补码是 0000 0011,所以结果是为1111 1100,原码为1000 0100,即为-4。
右移运算的规则是:低位(0)补齐,用符号位补移出的高位(1)。
举例:
例1:1>>5是多少?
1的补码是0000 0001,右移5后为,0000 0000,符号位是0,补最后一个1,结果还是 0000 0000,即0。
例2:3>>1是多少?
3的补码是0000 0011,右移1后为,0000 0001,符号位是0,补倒数第二个1,结果是 0000 0001,即1。
左移运算的规则是:符号位不变
举例:
例1:-1<<5是多少?
-1的补码是1111 1111,左移5是1110 0000,补码是1101 1111原码是1010 0000,即-32。
例2:3<<1是多少?
3的补码是0000 0011,左移1后为是0000 0110,原码是 0000 0110,即6。
例3:3<<6是多少?
3的补码是0000 0011,左移1后为是0000 1100 0000,原码是 0000 1100 0000,即192。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章