移位运算详解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
移位运算详解

移位运算详解 1 下面是负-2的补码,也是负数的内存中实际存储的形式。 11111111111111111111111111111110 下面是-2的反码: 11111111111111111111111111111101 下面是正2的原码: 前面省略30个0:……10 -2 ################## 2的编码(原码) 00000000000000000000000000000010 2右移1位后的原码(相当于除2) 00000000000000000000000000000001 2的编码(原码) 00000000000000000000000000000010 2无符号右移1位后的原码(相当于除2) 00000000000000000000000000000001 ################ 负数有符号右移的步骤 -3的编码(补码): 11111111111111111111111111111101 -3右移1位后的补码(有符号,负数补1,正数补0) 11111111111111111111111111111110 -3的编码(补码): 11111111111111111111111111111101 -3无符号右移1位后的补码(无符号都补0) 01111111111111111111111111111110 ######################## 正数(-a)的编码(原码) 01111110000000110000000000000000 负数a的编码(补码) 10000001111111010000000000000000 负数a无符号右移(为正)后的编码(补码-并直接补0) 01000000111111101000000000000000 负数a的编码(补码) 10000001111111010000000000000000 负数a右移(仍然为负)的编码(补码) 11000000111111101000000000000000 负数a的编码(补) 10000001111111010000000000000000 负数a左移1位后(仍为负)的编码(补) 00000011111110100000000000000000 总结: 正数在内存中只有一种存在形式:原码。 负数在内存中也只有一种存在形式:补码。 只是人们发现,负数的编码可以由正数的编码(原)取反(反)再加1得到。 正数的编码可以由负数的编码(补)减1(反)再取反(原)得到 对于无符号右移,直接将正数(原)或负数(补)的编码从第一到第三十二依次右移,再在最最前端补0. 对于有符号右移: 正数: 正数(原)的编码从第一到第三十二依次右移,再在最最前端补0 负数: 负数(补)的编码从第一到第三十二依次右移,再在最最前端补1 左移都是在末尾补0。 java程序源代码: package test03; public class Test06_23 { /** * int a = 0x81fd0000; // 1000 0001 1111 1101 0000 0000 0000 0000 a = 1; * 变量a的值为:()。 (最高位为1)负数a,无符号右移后结果(直接补0)。 0100 0001 1111 1101 0000 0000 0000 * 0000 01000000111111101000000000000000 * * 注意:负数在内在中永远是补码形式。只是人们发现,可以通过对正数的编码进行取反加1得到负数在内在中的形式。 也就是常说的负数以补码存在。 * * * @param args */ public static void main(String[] args) { byte b1 = 1; System.out.println(Integer.toBinaryString(b1)); byte b = (byte) ~b1; System.out.println(下面是负-2的补码,也是负数的内存中实际存储的形式。); System.out.println(Integer.toBinaryString(b)); System.out.println(下面是-2的反码:); System.out.println(Integer.toBinaryString(b - 1)); System.out.println(下面是正2的原码:); System.out.println(前面省略30个0:…… + Integer.toBinaryString(~(b - 1))); System.out.println(b); System.out

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档