【java】java中关于移位一些说明

其实不仅仅适用于java 计算机中移位都是这样处理的

左移 << 
有符号的移位操作
左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充

右移位:>>

有符号的移位操作
右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。

【因为负数表现形式是补码 补码的左移补0 右移补1】
【正数是用原码表示的 左移右移都是补0】

尤其要注意负数的右移位 先转换成补码 移位 补1 然后转换成原码 得出真实的值


算术右移>>> 

 (unsigned right-shit),右移过程使用零扩展(zero extension),即最高位一律补0,也就是算术右移


背景知识:

计算机中 正数用原码表示 负数用补码表示

转载[http://indian.blog.163.com/blog/static/1088158200610942745817/]
1、原码


原码就是符号位加上真值的绝对值。简单说,就是符号位加上数的二进制表示。比如,+3(以8bit为例),符号位为0,3转化为二进制就是11,那么 +3 的原码就是00000011(不足部分补0)。同理, -3,符号位为1,3转化为二进制就是11,那么 -3 的原码就是10000011(不足部分补0)。即:


[+3] = [00000011]原


[-3] = [10000011]原


2、反码


一个负数的符号位不懂,其余位取反,就是机器数的另一种表示形式——反码。正数的反码与原码形式一样。


[+3] = [00000011]原 = [00000011]反


[-3] = [10000011]原 = [11111100]反


3、补码


负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。


[+3] = [00000011]原 = [00000011]反 = [00000100]补


[-3] = [10000011]原 = [11111100]反 = [11111101]补


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值