运算符:^,~,-

一、^

按位异或运算符“^”是双目运算符。当两对应的二进位相异时,结果为1。
2(10) 1(01) => 2^1=3(11);
3(11) 1(01) => 3^1=2(10);
Number^1:
(0,1),(2,3),(4,5),(6,7),(8,9)……(n-1,n);
当知道每组的其中一个数,可求另一个数。

二、~

步骤:~B:B二进制 =>取反 => 减1 => 再取反 => 转化为 10 进制的负数

计算~60:
60的8位二进制数是 0011 1100
先取反即 1100 0011
减1即 1100 0010
再取反即 0011 1101
转化为10进制即 61
再取负数即 -61;
所以 ~60 = -61

计算~0
8位二进制数是 0000 0000
取反 1111 1111
逆操作 -1 => 1111 1110
取反 => 0000 0001
即 1
又因此处 是取反 负数 即 ~0 = -1

三、-

步骤:-k:按位取反,然后末尾加1;

k=12,计算-k:
12的二进制为=>1100
按位取反=>0011
末尾加1=>0100
转换=>4

应用:lowbit(k)为整数k的二进制表示中右边第一个 1 所代表的数。
lowbit(k)= k & (-k);

例如:计算lowbit(10);
10的二进制=>1010
按位取反=>0101
末尾加1=>0110
(1010)&(0110)=>(0010)
转换为十进制=>2
所以整数 10 的二进制表示中右边第一个 1 所代表的数为 2.

inline int lowbit(int x)
{
    return x&(-x);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为君倾此杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值