2012年(82)
分类: C/C++
2012-07-18 15:56:18
按位或运算:参加运算的两个数据,按二进位进行“或”运算,如果两个相应的二进位都为0,则该位的结果值为0,否则为1,
按位与运算:参加运算的两个数据,按二进位进行“与”运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0,
显然,这里要用位或,而不是与。在fcntl.h中,可以见到O_WRONLY的定义值是"01",八位就是"00000001",O_CREAT是"0100",二进制就是"01000000",竖线“|”不是“与”,是逐位“或”算,O_RWONLY|O_CREAT合起来就是"01000001“,这两个"1"的位置并不冲突,在这里,open()函数得到的值是已经合并好了的值"01000001",open()函数可以根据这两个独立的二进制"位"知道是读写打开或者创建。 后面类推
平时我们都不知道什么情况下要用位运算,其实,对于通信协议里面,无效载荷应该尽量减少,用位结构的比较多。
对于设备的控制,设备地址空间有限,控制和状态一般只有开和关,用位操作的也比较多。对于惜byte如金的单片机bool型变量也通常用位来表示。C语言一般的程序里,也经常用位来保存状态信息。