java与或非 求大神解救
发布网友
发布时间:2022-05-21 08:17
我来回答
共2个回答
热心网友
时间:2023-10-20 11:02
先全部转换成二进制。 最高位是符号位
0是 0x0000,~取反运算,变成0xffff,在内存中,存的数是除符号位,取反+1.所以是 -1
第2题。负数的比较麻烦,你可以反过来计算,1表示二进制 0001,~取反后,为1110,存在内存中是除最高位(符号位)不变,其他取反加1.即是1010,为-2
第三题 2 -> 0010 取反后 1101,保存在内存中,取反加一,符号位不变,1011 是-3
| 是与运算。逢1为1(0|1 = 1,0|0=0,1|1=1), -1 是 1001取反加+1 -> 1111 与 3( 0011)进行与运算 为1111,这个表示 -1
2 -> 0010 , 3-> 0011 2|3 -> 3
5 -> 0101 , 3 -> 0011 5|3 -> 0111 -> 7追问是不是把他转成二进制比较 高位1是负数 那我怎么判断他是负数或者是最高的位权 1111 1111 是255也可能是 -127啊 是转原码算还是补码算
追答不好意思。。百度我很少登的。 C语言中 unsigned 声明的是无符号的, 默认是有符号的
你可以编程实践一下,这样比较容易理解。 推荐你注册一个CSDN账号。在里面被回复的速度会提高很多
热心网友
时间:2023-10-20 11:03
~0==-1(~按位非):
0000000000000000 ==0
111111111111111111 ==-1
-1 | 3==-1(|是按位或):
111111111111111111 ==-1
0000000000000011 ==3
111111111111111111 ==-1
5 | 3==7:
0000000000000101 ==5
0000000000000011 ==3
0000000000000111 ==7