java易错笔试题_Java笔试面试易错题--原码、反码、补码、>>、>>>、<<

1. 原码

数字在计算机中是以二进制表示的,源码就是将十进制转化为二进制,十进制是逢十进一,同理二进制是逢二进一。

先来一个十进制,对应一个二进制表示:

7:0111

6:0110

源码如此简单,仿佛在侮辱我的智商,不看劝退...

没那么简单,来看个负数:带符号的二进制(第一位为符号位1表示负数)

-7:1111

-6:1110

再来个加法运算:

1+1=2:0001(1)+0001(1)=0010(2)

2+3=5:0010(2)+0011(3)=0101(5)

3+(-1)=2:0011(3)+1001(-1)=1100(-4)

2+(-5)=(-3):0010(2)+1101(-5)=1111(-7)

1+(-1)=0:0001(1)+1001(-1)=1010(-2)

黑人大问号????负数运算怎么没一个对的,机器果然没脑子,接下来让我们给它赋予智慧--反码

2. 反码

正数的反码还是等于原码,负数的反码就是他的原码除符号位外,按位取反。

举个栗子:

数字 原码 反码

3 0011 0011

5 0101 0101

-3 1011 1100

-5 1101 1010

再来做个加法运算:

1+1=2:0001(1)+0001(1)=0010(2)

2+3=5:0010(2)+0011(3)=0101(5)

2+(-5)=(-3):0010(2)+1010(-5)=1100(1011)(-3)

1+(-1)=0:0001(1)+1110(-1)=1111(1000)(0)

3+(-1)=2:0011(3)+1110(-1)=0001(0110)(6)

(-1)+(-1)=(-2):1110(-1)+1110(-1)=1100(1011)(-3)

后两个相加还是不对,看来反码也不太靠谱,科学是非常严谨的,绝不能容忍这种不靠谱的事情发生,于是补码这种东西就应用而生了。

3. 补码

学习了大神的概念用‘模’和‘同余’的概念解释补码。模就是一个周期,下面是参考别人的例子:

d7d586bb5018

补码概念的解释

d7d586bb5018

补码实例

如果这两个截图还不太明白请移步大神的原文,传送门

计算补码的方法:

法1. 正数的补码等于他的原码,负数的补码等于反码+1。

法2. 负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

4. <

eg: 00000101(5)<<1=00001010(10)左移一位相当于2;左移两位相当于2^2==*4

5. >>运算(二进制右移,正数高位补0,负数高位补1)

eg: 00000101(5)>>1=00000010(2)

00000111(7)>>1=00000011(3)

00001010(10)>>1=00000101(5)

发现没结果是除以2的n次方向下取整

6. >>>运算(无符号右移,逻辑右移,无论正负,高位补0)

正数与>>运算结果相同

负数就不一定了

d7d586bb5018

来一段Java源代码,这样就读的懂了

参考:

1. https://blog.csdn.net/afsvsv/article/details/94553228

2. https://www.cnblogs.com/chuijingjing/p/9405598.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值