3

我是一个比较优秀的C程序员,我喜欢做研究,讨厌问问题,但是这段特殊的代码简直令人不安。它与 XQueryKeymap 一起使用,但我完全不明白:

#define BIT(c,x) (c[x/8]&(1<<(x%8)))

真正困扰我的是[]<<符号。但如果你能口头说出整件事的意思,我会非常感激。

4

2 回答 2

5

它将值打包到 char 数组中。每个数组元素(一个 char 数组)有 8 位,因此数组的索引由x/8- 同时1<<(x%8)通过模数(的余数)对 char 中的 8 位移动一个位x/8- 所以这个如果设置了位,则宏返回非零,否则返回x0。

于 2013-04-12T16:17:41.323 回答
3

万维网。c如果不是可取消引用的类型并且x不是整数类型,则此宏将失败。另外,没有括号会使这更不安全。不好的代码。

x将位数转换为包含在c. 将<<掩码向上移动以读取位,而将[]用于读取内存。如果设置了数组中的位,则返回 1,否则返回 0——因此BIT得名。

于 2013-04-12T16:17:55.793 回答