要理解位操作符,首先要理解 数字如何转换为供计算机使用的二进制数
十进制或者其他进制的数字,在计算机运算的时候,需要转换为计算机使用的二进制。
数字转换为二进制以后,还要再进行一次转换才变成供计算机使用的二进制。
数字转换为二进制后,再转换为它的补码,这个补码就是供计算机使用的二进制码。
数字转换为二进制数时,使用最高位,也就是最左边那一位,代表符号,0 代表正数,1 代表负数。使用8位二进制数,0000 0001,代表1; 1000 0001代表-1;
最高位的0、1分别代表正负。
正数的 二进制正码,反码,补码都是这正数的二进制数本身。
- 1 的二进制数,使用一个字节表示就是:0000 0001,其正码为0000 0001,反码 跟补码也是 0000 0001
负数的二进制数的正码、反码、补码则不同
- -1 的正码为 1000 0001,它的反码是除了最高位的符号位,其余的数字取反,反码是 1111 1110,除了第一个符号位1,其余的数字原来是1的变0,原来是0的变1
- -1 的补码则是在反码的基础上,加1, -1 的补码为 1111 1111,
- -1 的正码 1000 0001
- -1 的反码 1111 1110
- -1 的补码 1111 1111
在理解了正数与负数的二进制码之后,我们再来看这个 按位取反操作符(~)
位运算符,操作的是数字的二进制补码,而非正码
按位取反操作符,操作的是数字的二进制补码,而非正码
-按位取反,从字面意思去理解就是,二进制数的每一位,0换成1,1换成0
-下面的例子是将整数转换为一个字节,也就是8位的二进制数
- 例如:正数 1,对它进行按位取反,~1
-它的补码为 0000 0001 ,对它进行按位取反,就是把每一位都进行0和1的互换,
得到 1111 1110,得到的还是一个补码
-我们把这个补码 1111 1110,转为正码,因为最高位(左边第一位)为1,所以是
负数,负数的正码是补码减1,然后除了最高位,其余位取反,得到 1000 0010,
它代表的也就是十进制的-2
-转换过程:
1 的补码 0000 0001
按位取反 1111 1110(另一个数字的补码)
取上面补码的正码,因为最高位是1,即是一个负数,所以-1,得到 1111 1101,
取反 1000 0010
正码为 1000 0010,即-2
-例如:负数 -1,对它进行按位取反,~(-1)
-(-1)的正码为 1000 0001
-(-1)的反码为 1111 1110
-(-1)的补码为 1111 1111
-我们要操作的就是(-1)的补码,也就是 1111 1111
-按位取反得到 0000 0000
-0000 0000 的正码为 0000 0000
-0000 0000 用十进制数表示,就是0
-(-1)按位取反,得到0
-
下面我们再来看一个例子
-将数字转换为两个字节的二进制数,然后进行 按位取反操作,看结果是否一样-例子: -对(-1)进行按位取反:~(-1) -(-1)的16位正码是:1000 0000 0000 0001 (负数的二进制码,最高位为1) -(-1)的16位反码是:1111 1111 1111 1110 -(-1)的16位补码是:1111 1111 1111 1111 (反码+1,得到补码) -对(-1)进行按位取反得到: 0000 0000 0000 0000 (另一个数字的补码) -最高位为0,所以是一个正数,正数的正码、反码、补码都一样, -所以这个数字的正码为:0000 0000 0000 0000,这个数字为0 -所以:对(-1)进行按位取反,得到数字0, ~(-1) = 0-从上面的例子中我们可以看出,不管是使用多少位的二进制数来转换十进制数,按位取反得到的结果是一样的(在计算机可计算的范围内)
本文深入解析位操作符的原理及应用,重点讲解数字如何转换为二进制,并介绍正负数的二进制表示,包括正码、反码、补码的概念。通过实例演示按位取反操作符(~)的作用,揭示位运算符在数字二进制补码上的操作机制。
1835

被折叠的 条评论
为什么被折叠?



