【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]补


















阅读更多
文章标签: java extension 扩展
个人分类: java学习
想对作者说点什么? 我来说一句

移位密码java版凯撒密码

2010年06月06日 7KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭