首页 > 编程知识 正文

c语言中的位操作,原码补码转换位操作

时间:2023-05-04 11:14:11 阅读:241068 作者:2715

位操作(Bit manipulation) 

嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 对这个问题有三种基本的反应

1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。

2) 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。

3) 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:

#define BIT3 (0x1 << 3) (采用宏将数字定义为有意义的BIT3,明确,不易出错,改起来方便)static int a;void set_bit3(void) {a |= BIT3;}void clear_bit3(void) {a &= ~BIT3;}

 

一些人喜欢为设置和清除值而定义一个掩码(待操作位全1,其余位全0的数,对于某个意义靠多位同时表示的最好带上掩码,隔离其他位的影响)同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作,先取反再&是对某位清0的最好操作。

 

考点:

在嵌入式系统中,时刻要关注移植性,具体的程序中不要出现具体的数字,这些数字都应该define成某个有意义的符号,可读性可移植性都很强,比如

#define BIT(x) (0x1 << (x))

X作为参数可以很方便的对任意位进行操作,意义明确,更改替换方便

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。