public class A01
{ public static void main(String[] args)
{ int a = 5;
int b = 10;
System.out.println("(a = b) = " + (a = b));
System.out.println("(-24 >> 1) = " + (-24 >> 1) + "\t (-24 >>> 1) =
" + (-24 >>> 1));
}
} 我是Java菜鸟,哪位大哥帮我解释下,(a=b)=10 (-24>>>)=2147483636 是怎么得来的啊~~
Java问题 运行结果:(a=b)=10 (-24>>1)=-12 (-24>>>)=2147483636
答案:4 悬赏:0 手机版
解决时间 2021-02-15 19:46
- 提问者网友:暗中人
- 2021-02-15 05:16
最佳答案
- 五星知识达人网友:轮獄道
- 2021-02-15 05:28
这里给你介绍一下二进制问题。
int类型是四个字节,如int型的1的二进制就是:
00000000 00000000 00000000 00000001
-1是:
11111111 11111111 11111111 11111111
1+(-1)= ? 可以每一个位相加。得到结果是:
00000001 00000000 00000000 00000000 00000000
如果每个位手工相加得到的是五个字节的数,而int型是四个字节,越界了。
所以结果只取后面四个字节,即32位:
00000000 00000000 00000000 00000000 所表示的值就是0,
与实际1+(-1)=0相符。
如果让-1移位,即(-1)>>>1会是多少呢?
11111111 11111111 11111111 11111111 向右移移位得到:
01111111 11111111 11111111 11111111 这个数是int类型最大的数,
也就是Integer.MAX_VALUE的值。
所以通常负数移位都是大的正数。
int类型是四个字节,如int型的1的二进制就是:
00000000 00000000 00000000 00000001
-1是:
11111111 11111111 11111111 11111111
1+(-1)= ? 可以每一个位相加。得到结果是:
00000001 00000000 00000000 00000000 00000000
如果每个位手工相加得到的是五个字节的数,而int型是四个字节,越界了。
所以结果只取后面四个字节,即32位:
00000000 00000000 00000000 00000000 所表示的值就是0,
与实际1+(-1)=0相符。
如果让-1移位,即(-1)>>>1会是多少呢?
11111111 11111111 11111111 11111111 向右移移位得到:
01111111 11111111 11111111 11111111 这个数是int类型最大的数,
也就是Integer.MAX_VALUE的值。
所以通常负数移位都是大的正数。
全部回答
- 1楼网友:怀裏藏嬌
- 2021-02-15 06:20
这不是移位运算么?int有它的数据范围当超过时 就会从最大的岛最小的来回循环所以你看到的这个结果很大
- 2楼网友:爱难随人意
- 2021-02-15 06:12
一:
"(a = b) = " + (a = b)
后面的+(a+b) 是指把b的值赋值给a,结果a=10 所以会输出a的新值10
二:
>>这是位移符号,意思是指把-24转变成二进制,然后每位向右移1位,左边补0再转换成10进制,即是。
这两写法在Java中几乎不会使用,您就别费心思了。
- 3楼网友:玩世
- 2021-02-15 05:51
你好!
这是位移符号,意思是指把-24转变成二进制一:
"(a = b) = " + (a = b)
后面的+(a+b) 是指把b的值赋值给a;>,然后每位向右移1位,结果a=10 所以会输出a的新值10
二:
>,左边补0再转换成10进制,即是
如有疑问,请追问。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯