我是一个比较优秀的C程序员,我喜欢做研究,讨厌问问题,但是这段特殊的代码简直令人不安。它与 XQueryKeymap 一起使用,但我完全不明白:
#define BIT(c,x) (c[x/8]&(1<<(x%8)))
真正困扰我的是[]
和 <<
符号。但如果你能口头说出整件事的意思,我会非常感激。
我是一个比较优秀的C程序员,我喜欢做研究,讨厌问问题,但是这段特殊的代码简直令人不安。它与 XQueryKeymap 一起使用,但我完全不明白:
#define BIT(c,x) (c[x/8]&(1<<(x%8)))
真正困扰我的是[]
和 <<
符号。但如果你能口头说出整件事的意思,我会非常感激。
它将值打包到 char 数组中。每个数组元素(一个 char 数组)有 8 位,因此数组的索引由x/8
- 同时1<<(x%8)
通过模数(的余数)对 char 中的 8 位移动一个位x/8
- 所以这个如果设置了位,则宏返回非零,否则返回x
0。
万维网。c
如果不是可取消引用的类型并且x
不是整数类型,则此宏将失败。另外,没有括号会使这更不安全。不好的代码。
x
将位数转换为包含在c
. 将<<
掩码向上移动以读取位,而将[]
用于读取内存。如果设置了数组中的位,则返回 1,否则返回 0——因此BIT
得名。