文中2'k代表2的k次方
1 除以2的k次幂可以用位运算:
n/2'k == n>>k
2 对2的k次幂取余数可以用位运算:
n%2'k == n & ((1<<k)-1)
比如 100%32
100的二进制为 1100100
((1<<5)-1)等于31为 0011111
两个数相与即得 100,故
100%32 = 4
3 对于整数n,从低位开始,把它的第k位(0<=k<=31)置为1的操作为:
n = n | (1<<k)
4 对于整数n,从低位开始,把它的第k位(0<=k<=31)置为0的操作为:
n = n & ~(1<<k)
5 对于整数n,从低位开始,测试它的第k位(0<=k<=31)是否为1,若为1,返回一个大于0的数,否则返回0
return n & (1<<k)
6 对于整数n,判断它是奇数还是偶数
若n & 1大于0,则n是奇数,否则n是偶数
7 对于整数n,若n是奇数,则把n减1变成偶数,若n是偶数,则把n加1变成奇数
n = n ^ 1
8 对于奇数n,有如下性质
(n-1) ^ n ==1
9 最大的int
01 1111111111 1111111111 1111111111
MAX_INT = ~(1<<31)
10 最小的int
10 0000000000 0000000000 0000000000
MIN_INT = (1<<31)
11 把最低位的1变为0
比如: 111000 ---> 110000
n = n - (n&-n)
12 判断两个整数数是否同号
#define MASK 0x80000000
flag = (x & MASK) ^ (y & MASK)
如果flag为0,说明不同号,否则同号
13 交换两个值,不用临时变量
想将a和b的值互换,可以用以下赋值语句实现:
a=a∧b;
b=b∧a;
a=a∧b;
14 bitset的C语言实现
#include <stdio.h>
#include <string.h>
#define N 4000000000
#define SHIFT 5
#define MASK 0x1f
int a[1+N/32];
void set(unsigned int i)
{
a[i>>SHIFT] |= (1 << (i & MASK)); // a[i/32] |= (1 << i%32)
}
void clr(unsigned int i)
{
a[i>>SHIFT] &= ~(1 << (i & MASK)); // a[i/32] &= ~(1 << i%32)
}
unsigned int test(unsigned int i)
{
return a[i>>SHIFT] & (1 << (i & MASK)); // a[i/32] & (1 << i%32)
}
int main()
{
unsigned int i;
memset(a, 0, sizeof(a));
for (i = 0; i < N; i++) {
set(i);
}
for (i = 0; i < 10; i++) {
if(test(i)) {
printf("%d exitst\n", i);
}
}
getchar();
return 0;
}
分享到:
相关推荐
c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算
c语言位运算c语言位运算c语言位运算c语言位运算c语言位运算
0、逻辑运算符 1、位逻辑非运算 2、位逻辑与运算 4、位逻辑异或运算 5、位左移运算 6、位右移运算
c++位运算
正在学习位运算的人群
位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。文章介绍位运算符和位运算,位运算举例,位段等
ACM位运算技巧 一些常用到的基本位运算技巧
【转载】常用位操作 位运算应用口诀 常用位操作 几个常用的位操作 计算树状数组lowbit的三种方法 统计一个整数的二进制中1的个数(位运算技巧) 收藏 统计一个整数的二进制中1的个数的三种方法 位运算讲稿_by_...
C语言位运算 有6种: &, | , ^(亦或), <<(左移), >>(右移)。 注意:参与位运算的元素必须是int型或者char型,以补码形式出现。 按位与& &运算常应用于: 迅速清零 保留指定位 判断奇偶性 a & 1 = 1...
Java的位运算
位运算大全 位运算详解 位运算实例 适合嵌入式开发
(3)加减必须用最基本的1位全加器fa作为基础,可以采用直接由8次1位运算得到8位的操作;也可以先构造4位加法器,再进一步实现8位加减运算。 注意:算术运算的两个操作数要求都是带符号数,即1位符号位和7位数据位...
Java位运算操作 左位移 右位移 与或非的操作
有关 位运算 的简介
实用位运算规则,让你了解位操作的知识,此属于C语言的基础知识内容。
JAVA位运算.pdf ,深入了解java位运算
摘自2014国家集训队论文《回归本源——位运算及其应用》,详细描述了位运算的众多巧妙用法,对于位运算的深入运用可以参考。
这是一个16位运算器的设计,有完整的实验过程,适合初学者
《计算机组成原理》实验报告---8位算术逻辑运算实验.docx《计算机组成原理》实验报告---8位算术逻辑运算实验.docx《计算机组成原理》实验报告---8位算术逻辑运算实验.docx《计算机组成原理》实验报告---8位算术逻辑...
学习java编程,位运算的课件不好找。赶快下啊,系统的有根据的,美!!