^异或运算符。比较两个数的每位,如果存在于其中一个操作数中但不同时存在于两个操作数中则为1,否则为0
3^3得0
~按位取反运算符。是一元运算符。0变1,1变0。包括符号位。
~2得-3
Debug.Log(Convert.ToString(~2, 2));
得11 11111 11111 11111 11111 11111 11101 共32位(4*8字节)
-1按位取反是0,为什么?
在计算机中,负数用负数补码表示:负数的补码==它正数按负数补码计算(每位按位取反+1)
若1是00000001,取反就是11111110,加1是11111111
所以-1为11111111,取反是00000000。
负数的补码也==负数的原码除符号位按位取反+1
-1原码:10000001
除符号位反码:11111110
加1:11111111
总结:
1、所有正整数的按位取反是其本身+1的负数;
2、所有负整数的按位取反是其本身+1的绝对值;
3、零的按位取反是-1(0在数学界既不是正数也不是负数);
0的原码:00000000000000000000000000000000
取反:11111111111111111111111111111111
首先这是针对int占4个字节的情况。
最高位是符号位,1表示是负数,0表示是非负数。
0111 1111 1111 1111,这是int_max,可能我们就会想为什么最小值不是-int_max呢?
因为计算机是以补码的形式来存储数字的,不管-0还是+0,补码都是0000 0000 0000 0000,
这就造成了没有任何一个数的补码是1000 0000 0000 0000,所以就可以把这个补码用来存储一个数(不要浪费资源嘛),就规定用它来存储-(int_max+1),所以int最小值是-2147483648,即 1000 0000 0000 0000。
【拓展】:
因此我们也发现,2147483647 + 1会溢出变成-2147483648
因为2147483647 补码是:0111 1111 1111 1111 1111 1111 1111 1111
加1之后补码就变成了:1000 0000 0000 0000 0000 0000 0000 0000
这正好就是-2147483648的补码
————————————————
版权声明:本文为CSDN博主「AAS48」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40163242/article/details/98056900