位操作符中的按位取反操作符:~a

本文深入解析位操作符的原理及应用,重点讲解数字如何转换为二进制,并介绍正负数的二进制表示,包括正码、反码、补码的概念。通过实例演示按位取反操作符(~)的作用,揭示位运算符在数字二进制补码上的操作机制。

要理解位操作符,首先要理解 数字如何转换为供计算机使用的二进制数

十进制或者其他进制的数字,在计算机运算的时候,需要转换为计算机使用的二进制。
数字转换为二进制以后,还要再进行一次转换才变成供计算机使用的二进制。

数字转换为二进制后,再转换为它的补码,这个补码就是供计算机使用的二进制码。

数字转换为二进制数时,使用最高位,也就是最左边那一位,代表符号,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
    

    -从上面的例子中我们可以看出,不管是使用多少位的二进制数来转换十进制数,按位取反得到的结果是一样的(在计算机可计算的范围内)

在python中,对数字进行按位取反,得到的结果是: ~x == -x-1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值