一 0和1 简单规则:
二、 简单题目总结:
1 已知数n,检测其K位(二进制)是否置位(是否为1)
n&(1<<k-1) 如果表达式为真,则第K位置位1。
说明:
1 左移 k-1位,变为 第K位为1,其他的位置为0.
根据公式a和公式c, n的二进制除k位之外,均变成0,而第k位与1 &之后,原来是什么还是什么。
如果是1,则结果一定大于0.如果是0.则最终的结果就是0.
2 给定一个操作数,将其K位置位
可以使用下面的表达式
变为1,可以使用公式d
n|1<<(k-1)
3 给定操作数,将第k位清零
清零应该使用公式a
n&~(1<<k-1)
4 切换第k位
切换一般使用 异或
n^(1<<k-1)
5 检查某个数是否是2的幂
给定一个数检查是否是2的n次方,可以使用表达式
if(n&n-1==0) 如果true则表示为2的n次方。
6 找到给定操作数n的模
如果是n是2的幂,则可以用下面的表达式 m&(n-1)
7 计算n中1的个数
方法1: 循环右移n,每个数和1进行&,结果为1,则表示为1
int n,count=;
while(n){
count+=n&;
n=>>;
}
方法2 使用取模操作
while(n){
if(n%==){
count++;
}
n=n/;
}
方法3 使用切换法
while(n){
count++;
n=n&(n-)
}
8反转二进制数
对二进制数n进行反转的步骤是:
定义 int nReverse = n;
第一:nReverse左移 空出最右边的1位。
第二;取出n的最右边的一位, n&1
第三:将上面的值放到nReverse的右边。nReverse = nReverse| n&1 。
第四,将n右移,接下来循环,来处理n的第二位。
int s= sizeof(n);
for(;n;n>>=){
nReverse = nReverse<<;
nReverse = nReverse| n& 。
s--;
}
nReverse <<=s;
交换二进制的奇偶位
n=01001011;
找出操作数的奇数位 n&0xAA
找出操作数的偶数位 n&0x55
奇数位右移1位
偶数未右移1位
将两个数进行或操作。