打印
[疑难问答]

用宏定义实现位运算

[复制链接]
486|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
robertesth|  楼主 | 2024-6-16 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
与或非
位与& 和 逻辑与&&
位与的真值表的特点是:只有1&1结果才1;1&0,0&1,0&0结果都为0.
位与操作与逻辑与操作一起记住,把非0的数看成是1,0做为0,然后再进行与&运算,例如0xffff&&0x11=1;
位或| 和 逻辑或||
位或只有两个0位或结果为0,其余都是1,真值表:1|1=1,1|0=1,0|1=1,0|0=0
两个操作数作为整体操作,把非0的数看成是1,0看成是0,进行位与操作。
位取反~和逻辑取反!
位取反|每个二进制位按位取反,0变1,1变0。
逻辑取反,非0的数当做真,0作为假,逻辑运算:真变假,假变帧。
下面是例子,ARM中的移位操作都是无符号数;ARM中的读改写都是一体的,想要对一个寄存器中的某些特定位进行读改写,要将这个寄存器中所有的值读出来,然后修改特定位,最后再将修改好的值,写入寄存器。
与或非使用场景
特定位清零用&
如果希望将一个寄存器的某些特定位变为0,而不影响其他位,可以构造一个合适的由1和0组成的数和这个寄存器原来的值进行与操作&,可将特定位清零。
例如:将0xAAAAAAAA bit8-bit15清0,其他位不变,可以将这个数与oxFFFF00FF进行位与操作,得到0xAAAA00AA

特定位置1用|
或|运算的特定,与1则为1,遇到0为0.

特定位取反用异或操作
异或运算特点:相等为0,不等为1.**方法是:不同时进行或运算。

左移<<和右移>>
左移:移动后,后面的空缺自动补零。
右移:分为逻辑右移和算术右移

逻辑右移:不管什么类型,移动后,左边补零‘
算术右移,如果是无符号数,则左边补零;如果是负数,左边补1;

原文链接:https://blog.csdn.net/weixin_43916755/article/details/117737194

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

1038

帖子

0

粉丝