LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
Unity-C#编程:位运算符 异或^ 取反~
Zeiod 2022-02-27

^异或运算符。比较两个数的每位,如果存在于其中一个操作数中但不同时存在于两个操作数中则为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最小值为何是-2147483648,而不是-2147483647

首先这是针对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

推荐文章
评论(0)
分享到
转载我的主页