C 按位运算符分为以下两种:
<1> 按位逻辑运算符
<2> 移位运算符
其中 ,按位逻辑运算符分为以下4种:
(1) 二进制反码或按位取反: ~
分析: 一元运算符 ~ 把1变为0, 把0变为1。例如:
~(10011010)//表达式
(01100101) //结果值
假设:val的类型是unsigned char ,已被2赋值。在二进制中, 00000010表示2。那么~val的值为253, 即11111101。
注意: 运算符不会改变val的值。就像 6*val 不会改变 val 的值一样。
(2)按位与: &
分析:
二元运算符&通过逐位比较两个运算符对象,生成一个新值。
对于每个位,只有两个运算对象中相应的位都为 1 时,结果才为 1(两个位都为真时, 结果才为真)。
例如:
(100010)&(011110)//表达式
(000010)//结果值
(3)按位或:|
分析:
二元运算符 | 通过逐位比较两个运算符对象,生成一个新值。
对于每个位,只有两个运算对象中相应的位都为 0 时,结果才为 0(两个位都为假时, 结果才为假)。
例如:
(100010)&(011110)//表达式
(111110)//结果值
(4)按位异或: ^
分析:
二元运算符 | 通过逐位比较两个运算符对象,生成一个新值。
对于每个位,只有两个运算对象中相应的位一个为1,另一个为0时,结果才为 1(两个位一个为真,另一个为假时, 结果才为真)。
例如:
(100010)&(011110)//表达式
(111100)//结果值
而 移位运算符 分为以下2种:
<1>左移: <<
分析:
左移运算符将 其左侧运算对象 每一位的值向左移动 其右侧运算对象指定的位数。(简单点说:每一位都向左移动两个位置)
左侧运算对象移出左末端位的值丢失,用 0 填充空出的位置。
(10001010) << 2 //表达式
(00101000)//结果值
注意:该操作产生了一个新的位值,但不改变其运算对象。
<2>右移: >>
分析:
右移运算符将 其右侧运算对象 每一位的值向右移动 其左侧运算对象指定的位数。(简单点说:每一位都向右移动两个位置)
右侧运算对象移出右末端位的值丢失,用 0 填充空出的位置。
(10001010) >> 2 //表达式
(00100010)//结果值
注意:该操作产生了一个新的位值,但不改变其运算对象。
本文详细讲解了C语言中的按位逻辑运算符(包括取反、与、或、异或)和移位运算符(左移、右移)的工作原理及实例,帮助理解二进制运算在编程中的应用。

被折叠的 条评论
为什么被折叠?



