lowbit 计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lowbit 计算相关的知识,希望对你有一定的参考价值。


lowbit(n)取出非负整数n在二进制表示下最低位的1,以及它后面的0构成的数值。

设n>0,n的第k位是1,第0~k位都是0.

为了实现 lowbit操作,先把n取反,此时第k位变成0,第0~k-1位都是1.再令 n=n+1,此时因为进位,第k位变成1,第0~k-1位都是0.

在上面的取反加1操作后,n的第k+1到最高位恰好与原来相反,所以n&(~n+1)仅有第k位为1,其余位都是0.

而在补码表示下,~n=-1-n。

所以:

lowbit(n)=n&(~n+1)=n&(-n)  .

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<map>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;


int a[1000000];
int index;
void toBinary(int n)

index=0;
while(n)

a[index++]=n%2;
n/=2;

for(int i=index-1;i>=0;i--)

cout<<a[i];


int main()

int n;
cin>>n;
for(int i=0;i<=n;i++ )

cout<<i<<":";
toBinary(i);
cout<<"\\t"<<" "<<(-i&i)<<endl;

return 0;

前100位打表

100
1:1 1
2:10 2
3:11 1
4:100 4
5:101 1
6:110 2
7:111 1
8:1000 8
9:1001 1
10:1010 2
11:1011 1
12:1100 4
13:1101 1
14:1110 2
15:1111 1
16:10000 16
17:10001 1
18:10010 2
19:10011 1
20:10100 4
21:10101 1
22:10110 2
23:10111 1
24:11000 8
25:11001 1
26:11010 2
27:11011 1
28:11100 4
29:11101 1
30:11110 2
31:11111 1
32:100000 32
33:100001 1
34:100010 2
35:100011 1
36:100100 4
37:100101 1
38:100110 2
39:100111 1
40:101000 8
41:101001 1
42:101010 2
43:101011 1
44:101100 4
45:101101 1
46:101110 2
47:101111 1
48:110000 16
49:110001 1
50:110010 2
51:110011 1
52:110100 4
53:110101 1
54:110110 2
55:110111 1
56:111000 8
57:111001 1
58:111010 2
59:111011 1
60:111100 4
61:111101 1
62:111110 2
63:111111 1
64:1000000 64
65:1000001 1
66:1000010 2
67:1000011 1
68:1000100 4
69:1000101 1
70:1000110 2
71:1000111 1
72:1001000 8
73:1001001 1
74:1001010 2
75:1001011 1
76:1001100 4
77:1001101 1
78:1001110 2
79:1001111 1
80:1010000 16
81:1010001 1
82:1010010 2
83:1010011 1
84:1010100 4
85:1010101 1
86:1010110 2
87:1010111 1
88:1011000 8
89:1011001 1
90:1011010 2
91:1011011 1
92:1011100 4
93:1011101 1
94:1011110 2
95:1011111 1
96:1100000 32
97:1100001 1
98:1100010 2
99:1100011 1
100:1100100 4

 

以上是关于lowbit 计算的主要内容,如果未能解决你的问题,请参考以下文章

C语言中数组高位转为低位

K伪进制

C语言 对字节的高位和低位进行互换!

大数加法

c语言习题,输入一个正整数,按照从高位到低位的顺序输出各位数字。怎么做

如果只需要结果的低位部分,哪些 2 的补码整数运算可以在不将输入中的高位归零的情况下使用?