永发信息网

java移位运算的几道题

答案:2  悬赏:60  手机版
解决时间 2021-03-20 01:02
  • 提问者网友:沉默菋噵
  • 2021-03-19 15:53
System.out.println("第2段测试代码输出");
System.out.println(10>>5);
System.out.println(-10>>5);

System.out.println("第3段测试代码输出");
System.out.println(1<<31);
System.out.println(1L<<31);
System.out.println(1L<<63);

System.out.println("第4段测试代码输出");
System.out.println(1<<100);
System.out.println(1L<<100);

System.out.println("第5段测试代码输出");
System.out.println(7<<2);
System.out.println(7<<1<<1);

System.out.println("第6段测试代码输出");
int n = 34; int q=7;
System.out.println(q< for(int i = 0;i q = q<<1;
System.out.println(q);

System.out.println("第7段测试代码输出");
int m = 2000000000;
System.out.println(m<<1);
System.out.println(m*2);

System.out.println("第8段测试代码输出");
System.out.println((byte)255);
System.out.println((short)65535);
System.out.println((byte)-129);
System.out.println((byte)129);
System.out.println((byte)128);

(2) 分析第2段代码,正整数与负整数右移的最小值是什么?

(3) 分析第3段代码,三个语句输出为何不同?

(4) 分析第4段代码,两个语句输出为何不同?

(5) 分析第5段代码,两个移位运算是否等价?

(6) 分析第6段代码, q<
(7) 分析第7段代码,左移1位与乘2是否等价?左移1位是否一定值翻倍?

(8) 分析第8段代码,说明什么情况下,int类型的数字转换为byte或者short类型,会出现符号变化,即正数变负数,负数变正数?

第2段测试代码输出:0,-1
第3段测试代码输出:-2147483648,2147483648,-9223372036854775808
第4段测试代码输出:16,68719476736
第5段测试代码输出:28,28
第6段测试代码输出:28,0
第7段测试代码输出:-294967296,-294967296
第8段测试代码输出:-1,-1,127,-127,-128
最佳答案
  • 五星知识达人网友:woshuo
  • 2021-03-19 17:09
数在计算机中是以补码表示的。。
因此10就表示为00001010 (假设是8个bit) 而-10 就是11110110

java中 int占4个字节(32位),long占8个字节。。
如果对int进行移位操作的话,移的位数是n%32,就是说<<100 和<<4的结果是一样的(这个我没测过,书上写的); long类型的应该也是类似的。。记得有一个c语言面试题,如何快速计算出2*8等於多少,就是用2<<3,计算机只是2进制的,所以就进行移位计算机立即得到数值
byte 8位,,也就是说它表示的范围是-128~127,而255 应该是两个字节才能表示再来,也就是 00000000 11111111,对它进行强转,好像是截断取低位,取8个1,由於是补码转换成十进制也就是-1

ps:至於-1为什麽用11111111表示,呵呵 负数的补码是它的绝对值(的补码)取反再加1。。正数的反码和补码都是其本身,1的原码(补码)是00000001,取反11111110 再加1 得11111111。

以上如果有错。。那就是我记错了。。。
如果正解就给分哈。。。这个问题以前也困扰了我好多天。。
全部回答
  • 1楼网友:荒野風
  • 2021-03-19 17:17
全错。 在java中,对byte型进行位移操作,那么在移位进行之前,它们会自动转换成一个int,得到的结果也是int 第一题-17:
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯