- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 北京市2019年中考英语真题(含答案).pdf VIP
- 2022年新高考政治真题试卷(山东卷).pdf VIP
- 2025年最新详版征信报告个人信用报告样板模板word格式新版可编辑.docx VIP
- 辽宁省大连市甘井子区2024-2025学年上学期七年级 月考英语试卷(10月份).docx VIP
- 水土保持监督管理培训课件.pptx VIP
- 《现代汉语》各章练习题答案汇总 .pdf VIP
- 输变电工程环境保护和水土保持全过程管控培训课件.pptx VIP
- 生产建设项目水土保持方案管理办法培训课件.pptx VIP
- 培训课件_1411dxs小天鹅纯臻2.0新品1411DXS系列.pdf VIP
- 2022年内蒙古农业大学硕士研究生入学考试公共管理专业综合基础考研真题.pdf VIP
文档评论(0)