
int表示32位整数,也就是说,用二进制表示出来它最多是32位
而你的a已经是32位的二进制数了,左移1位,变成33位,超过了int的表示范围。这个时候会产生“截断”,2^32
-
a
=
-4,就这是b的值
01转换为二进制位0001
11转换为二进制位1011
异或原则,0和1组合为1 则结果为 1010转换成十进制为10(2的三次方+2的一次方)
同样的方法
可以求出100^111=11
1100100
1101111
0001011
~ 按位非(NOT)(一元运算)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 右移,左边空出的位以0填充
逐个,直接计算好了。
StringcharAt(int) 强制转成byte、int,就可以运算了。
数字就无所谓16进制、还是10进制了。转成String才会有差别。除非你是想运算16进制的字符转成的数字。
提供思路
将每个字节左移拼成8个字节 第一个左移56 第二个48。。。
0x30 0x31 0x39 0x39 0x39 0x39 0x39 0x39
0011 0000 0011 0001 0011 1001 0011 1001 0011 1001 0011 1001 0011 1001 0011 1001 。。。
然后将3个8字节异或 最后右移还原
true || false || false 结果是true
true ^ false ^ false,结果也是true
false || true || false 结果是true
false ^ true ^ false 结果也是true
false || false || true => true
false ^ false ^ true => true
就是说三个条件只有一个为真的时候,他们运算结果是一样的。
三个条件都是假的情况,运算结果都是false,也相同
但这不表示其他情况也能这样互换。
以上就是关于JAVA中关于负数的位异或运算全部的内容,包括:JAVA中关于负数的位异或运算、java中按位异或符号^ 是怎么执行的 为什么01^11=10 而100^111=102这是为什么呢、java异或16进制运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)