位运算和lowbit

位运算>>常见操作

1.n的二进制表示中第k位是多少n>>k&1

>>位运算符,表示把n的二进制数串往后移k位

&是与运算,&1表示判断奇偶。
例如011011&1(即000001),除了最高位其他位都是0所以011011只有0位(011011分别是543210位)的那个1参与有效运算,如果是1,与运算后也是1,对应十进制中的奇数,如果是零,与运算后也是零,对应十进制中的偶数,从而实现判断奇偶。这里用来判断第k位是多少显然也是可以的

2.lowbit:x&-x即x&(~x+1),表示x的第一个1,例如1010000返回10000,1010100返回100。

首先,-x=~x+1,~表示所有位取反。即负数的二进制表示,是找到其正数的二进制数串,每一位取反,最终+1。如5-00000101,-5->11111010->11111011,这样5+-5=00000000。

值得注意的是,251和-5比特串都是11111011,如果类型是unsigned ,串的第7位1为符号位,1表示负,从而该串表示-5,如果是signed,则表示251

然后lowbit原理如下,我们假设x的第一个1在k位,那么~x的0-k-1位全是1,第k位变成0,~x+1(即-x)后,0-k-1位所有1变成0,然后第k位变成1。现在相加,神奇的是,第0-k-1位,x和-x所有都是0,与运算后都是0,k+1位到最后一位全都相反,与运算后也是零,只有第k位是1,从而实现

eg;x:01011110000 ~x:1010001111 -x:1010010000 x&-x:0000010000,输出10000。

posted @ 2025-07-26 17:00  hardestnut  阅读(23)  评论(0)    收藏  举报