C语言中常见的置位操作(置0或置1)
来源:互联网 发布:js offsettop 不准确 编辑:程序博客网 时间:2024/06/10 20:51
如何对某一位置0或者置1?
方法一:
方法一:
写成宏,方便移植
#define setbit(x,y) x|=(1<<y) //将X的第Y位置1
#define clrbit(x,y) x&=~(1<<y) //将X的第Y位清0
#define setbit(x,y) x|=(1<<y) //将X的第Y位置1
#define clrbit(x,y) x&=~(1<<y) //将X的第Y位清0
方法二:
C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作,这跟嵌入式系统的编程特点有很大关系。我们通常要对硬件寄存器进行位设置
譬如,我们通过将AM186ER型80186处理器的中断屏蔽控制寄存器的
第6位设置为0(开中断2),最通用的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp &~INT_I2_MASK);
而将该位设置为1的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp | INT_I2_MASK);
判断该位是否为1的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
if(wTemp & INT_I2_MASK)
{
…
}
方法三:
int a|=(1<<x) //X就是某位需要置1的数字,如第四位置1为: a|=(1<<4)
int b&=~(1<<x) //把某位置0
int b&=~(1<<x) //把某位置0
x=x|0x0100 //把第三位置1
x=x&0x1011 //把第三位置0
x=x&0x1011
#define BitGet(Number,pos) ((Number) >> (pos)&1)) //用宏得到某数的某位
#define BitGet(Number,pos) ((Number) |= 1<<(pos)) //把某位置1
#define BitGet(Number,pos) ((Number) &= ~(1<<(pos)) //把某位置0
#define BitGet(Number,pos) ((Number) ^= 1<<(pos)) //把Number的POS位取反
#define BitGet(Number,pos) ((Number) |= 1<<(pos)) //把某位置1
#define BitGet(Number,pos) ((Number) &= ~(1<<(pos)) //把某位置0
#define BitGet(Number,pos) ((Number) ^= 1<<(pos)) //把Number的POS位取反
典型操作有:
WTCON |= (1 << 5) //WTCON的第五位清1
WTCON &= ~(1 << 5) //WTCON的第五位清0
WTCON |=
WTCON &= ~(1 << 5) //WTCON的第五位清0
上述方法在嵌入式系统的编程中是非常常见的,我们需要牢固掌握。
转载自 http://blog.sina.com.cn/s/blog_5f33242b0100ywcz.html
0 0
- C语言中常见的置位操作(置0或置1)
- c语言中常见的置位操作
- C语言中常见的置位操作
- C语言位操作的置1置0运算
- 【C语言】实现对一个8bit数据(unsigned char)类型的指定位的置0或置1操作,并保持其他位不变
- C语言 - 位运算置0操作
- 【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变
- C语言位操作中的置0和置1
- C语言位操作中的置0和置1
- C语言位操作中指定的某一位数置0、置1、取反
- C语言中位操作
- C语言中位操作
- C语言中位运算异或“∧”的作用
- 对指定位进行置0或置1操作
- C语语言位与位或位异或在操作寄存器时的特殊作用学习
- 【C语言】实现对一个8bit数据的指定位的置0或者置1操作,并保持其他位不变。
- C语言的位操作
- c语言的位操作
- STL中容器的迭代器在什么情况下会失效?
- JavaScript学习笔记(12)
- iOS索引列开发详解
- 继承
- autoSave
- C语言中常见的置位操作(置0或置1)
- ISDN帧格式介绍
- 三子棋
- 第4天
- asdf
- Unique Binary Search Trees 问题(leetcode )
- 文章标题
- 蜂鸣器知识
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊