将x最高位至第n位(含)清零:x & ((1 << n) - 1) 将第n位至第0位(含)清零:x & (~ ((1 << (n + 1)) - 1)) 实战位运算要点 判断奇偶: x % 2 == 1 —> (x & 1) == 1 x % 2 == 0 —> (x & 1) == 0 x >> 1 —> x / 2 即:x = x / 2; —> x = x >...
intabs(inta){intb;a=b>>31;return(a^b)-b;} intaverage(intx,inty){return(x&y)+((x^y>>1);} 畅享全文阅读体验 扫码后在手机中选择通过第三方浏览器下载
inline bool is2pow(int x) { return ( (x&-x)==x ); } 三:求一个整数有多少位是0: 原理同上。用x&(x-1) 1intcount =0;2while(x)3{4++count;5x &= (x-1);6} 四:二进制快速求幂: 1longpow(intx, unsignedint n){2longp =1;3while (n){4if(n &1) p *= x;5x *= x;6n ...
设一个数为x,求x与2的n次方乘积。这用数学来计算都是非常简单的: 在位运算中,要实现这个需求只需要用到左移运算,即x << n。 取x 的第 k 位 即取数字x对应的二进制的第k位上的二进制值。假设数字为5,其对应的二进制为0000 0101,取第k位二进制值的位运算为x >> k & 1。我们可以用 PYTHON 代码...
result = x & y # result = 0000 1100 (12) 按位或(OR):两个相应的二进制位中只要有一个为1时,结果位就为1。 python x = 60 # 60 = 0011 1100 y = 13 # 13 = 0000 1101 result = x | y # result = 0011 1101 (61) 按位异或(XOR):两个相应的二进制位相异时,结果位才为1。 python...
左移运算:x << y。将x左移y位,将x最左边的y位丢弃,在右边补y个0。 右移运算:x >> y。将x右移y位,这需要区分x是有符号数还是无符号数。在x是无符号数时,只需将x的最右边的y位丢弃,在左边补上y个0。在x是有符号数时,又分为x是正数还是负数。正数时,同无符号数的处理相同;负数时,将将x的最...
leetcode-cn.com/problems/po…给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true;否则,返回 false。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4 ^ x。示例 1:输入: n = 16输出: true示例 2:输入: n = 5输出: false示例 3:输入: n = 1输出: true ...
这里利用的负数的存储特性,负数是以补码存储的,对于整数运算 x&(-x)有 ●当x为0时,即 0 & 0,结果为0; ●当x为奇数时,最后一个比特位为1,取反加1没有进位,故x和-x除最后一位外前面的位正好相反,按位与结果为0。结果为1。 ●当x为偶数,且为2的m次方时,x的二进制表示中只有一位是1(从右往左...
lowbit操作:lowbit(x) 即 x&(-x),可以取出二进制数的最后一个1,比如6(110),6&(-6)得(10)。 异或(^) 满足交换律和结合率,( a^b=b^a、a^(b^c)=(a^b)^c ) 任何数和其自身做异或运算,结果是 0,即 a^a=0。 任何数和0做异或运算,结果仍然是原来的数,即 a^0=a。二...
x >> n x的所有二进制位向右移动n位,移出的位删掉,进的位补符号位 右移不会改变一个数的符号 【注意事项】 右移1位相当于 除以2 x 右移 n 位就相当于除以2的n次方 用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3) num = 0b10000000print(num) ...