有关二进制中原码,反码,补码的小知识

1 篇文章 0 订阅
1 篇文章 0 订阅

我们知道关于字节与字符的关系,在ASCII码中一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间,一个字节占8位。在java中 int 占4个字节,我们定义以int a=1;,那么这个在计算机中的表示为
0000 0000 0000 0000 0000 0000 0000 0001,
其中第一个0称为最高位表示符号位,在二进制中,0表示一个正数,1表示一个负数。相同,我们定义一个 int b=-1;在计算机中表示为
1000 0000 0000 0000 0000 0000 0000 0001。
关于原码,反码,补码的基本概念,我们知道有以下几点;
对于有符号的而言 (对于无符号的数,就不存在原码,反码,补码),
1,二进制的最高位是符号位;0表示正数,1表示负数。
2,正数的原码,反码,补码都一样。
3,负数的反码等于他的原码符号位不变,其他位取反。
4,负数的补码等于它的反码加上一。
5,0的反码,补码都是0。
6,java中没有无符号的数,换言之,java中的数都是有符号的。
7,在计算机运算的时候,都是以补码的方式来运算的。

我们来理解以下 在计算机世界中的1+1是如何进行运算的;
因为上面第7点,我们知道在计算机运算的时候 都是以补码的方式来运算的,1+1,都为正数,而正数的补码就是他本身,故运算过程为
1;
0000 0000 0000 0000 0000 0000 0000 0001
加上1;
0000 0000 0000 0000 0000 0000 0000 0001
等于;
0000 0000 0000 0000 0000 0000 0000 0010
—>逢二进一位 就为
0000 0000 0000 0000 0000 0000 0000 0002
所以最后结果为2,故1+1=2。
我们在看一个例子,计算1-2,在计算机中1-2,计算机仍然当做是加,就是1+(-2)来计算的,我们来分析他的运算过程为什么等于-1,
因为-2是原码,我们先要转换成补码,我们知道负数的补码等于他的反码加1,而他的反码是他的原码符号位不变,其他位取反。
我们知道-2的原码;
-2的原码为 1000 0000 0000 0000 0000 0000 0000 0010
先来得到-2的反码 ;
-2的反码为 1111 1111 1111 1111 1111 1111 1111 1101
在来得到-2的补码;
-2的补码为 1111 1111 1111 1111 1111 1111 1111 1110

在计算1+(-2);
1的补码;
0000 0000 0000 0000 0000 0000 0000 0001
加上-2的补码;
1111 1111 1111 1111 1111 1111 1111 1110
相加后得到的结果为;
1111 1111 1111 1111 1111 1111 1111 1111
可以看到 全部为1,最高位也为1了,可以知道这是一个负数,并且计算机运算过后全部都是以补码的方式存在的,我们还要将补码转换成我们所看到的原码,
运算后的补码结果为
1111 1111 1111 1111 1111 1111 1111 1111
转换成反码为(补码-1);
1111 1111 1111 1111 1111 1111 1111 1110
再将反码转换为原码(符号位不变,其他位全部取反);
1000 0000 0000 0000 0000 0000 0000 0001
最后得到的结果就为-1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值