prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 20.7

Q如何操作单个位?


A在 C 语言中,位操作非常直接且常用。要提取(测试)一个位,可以使用按位 AND(&)运算符,并配合一个表示你感兴趣的位(或位组)的位掩码。

	value & 0x04
要设置一个位,请使用按位 OR(||=)运算符。
	value |= 0x04
要清除一个位,请使用按位补码(~)和按位 AND(&&=)运算符。
	value &= ~0x04
(前面三个示例都操作的是第三个最低有效位,即 2**2 位,表示为常量位掩码0x04.)

要操作任意一个位,请使用左移(<<)运算符来生成你需要的掩码。

	value & (1 << bitnumber)
	value |= (1 << bitnumber)
	value &= ~(1 << bitnumber)
或者,你也可以预先计算一个掩码数组。
	unsigned int masks[] =
		{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

	value & masks[bitnumber]
	value |= masks[bitnumber]
	value &= ~masks[bitnumber]

为了避免符号位带来的意外情况,在操作位和字节的代码中,通常最好使用无符号整型。

另请参阅问题 9.220.8

参考文献:K&R1 第 2.9 节,第 44-45 页
K&R2 第 2.9 节,第 48-49 页
ISO 第 6.3.3.3 节、第 6.3.7 节、第 6.3.10 节、第 6.3.12 节
H&S 第 7.5.5 节,第 197 页;第 7.6.3 节,第 205-206 页;第 7.6.6 节,第 210 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管