首页 > 编程知识 正文

C 位操作与或非异或取反详解

时间:2023-05-03 09:12:38 阅读:186184 作者:4547

一、按位逻辑运算符1,每位相反~例如~(10 (结果位(01 ) ) )。

~var不改变var的值。 改变var的值时,var=~var;

2、分位数和有0就可以得到0,全部1得出1

var=300等价于var=var300

3、根据位或|得出1得出1,全部得出0变为0

var|=300等价于var=var|300

4 )异或(两者相等时为0,不相等时为1

二、位逻辑运算符运用1,用法:掩码()位单元和运算符是掩码) mask ),可以获取某个位的状态

2、使用方法:打开位(置位位)|)后,必须打开其中一位,其他位可能不会改变。 在这种情况下,可以使用按位或运算符

因为使用原理|运算符,所以与0组合时,结果就是其本身。与1组合时,结果为1

例如,我想把0xFE的第0个位置定为1

)0xFE|1=0xFF

3 )用法:关闭位(清除位)、~ )可能必须关闭其中一位,其他位保持不变。 在这种情况下,可以逐位取反

原理: flags=flags~Mask,Mask只要第一位是1,其他都是0,所以~Mask除了第一位外都是1

4、使用方法:切换位(^ )切换位是指通过改变原来的状态,接通断开,断开接通

原理:如果b是一个比特,b==1,则b^1=0; 如果b==0,则b^1=1

另外,即使b是0或1,0 ^ b也是b

所以,flags=flags^Mask; Mask位为1的切换,位保持为0

5、用法:校验位if((flagsmask )==Mask ) ) ) ) ) ) ) ) ) )。

{

trace(L ) n位为1 );

() ) ) ) )。

按位运算符的优先级低于==,因此必须加括号

掩码必须至少与其覆盖值的宽度相同,以便信息不跨越边界。

三、移位运算符1,左移(10001010 )2//式

(00101000(//结果值

假设value为1,则value2为4,但value本身不变,仍然为1

使用=更改变量的值

将value=2 value的值更改为4

2、右移有符号类型的右移的结果取决于机器,这里以无符号为例

(10001010 )2//式

(00100010(//结果值

value=3 //向右移动的结果代入value

3、移位运算符numbern; //number乘以2的n次方

数字;//如果number是非负的,用2的n次方除number

这些移位运算符类似于以十进制格式移动小数点并用10进行乘法或除法

运用:

# define byte _ mask0xffunsignedlongcolor=0x 002 a162f; unsigned char blue,green,red; red=colorBYTE_MASK; geen=(color8) BYTE_MASK; bue=(color16 ) BYTE_MASK; 概念:比特字段?

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