在ruby.h中,我发现很难理解这个宏:
#define SYMBOL_P(x) (((VALUE)(x)&0xff)==SYMBOL_FLAG)
我不知道为什么使用&
执行此0xff
操作。每个数字& 0xff
都不等于自己吗?
答案 0 :(得分:1)
&安培;是一个bitwize运算符(AND),(还记得逻辑表?)
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
那么它在这里做了什么?
0xff是255的六进制
二进制(DWORD):00000000 00000000 00000000 11111111
所以假设一个数字x = any_value
x的表示可以像这样
???????? ???????? ???????? ????????
每个?可以是1或0
所以应用bitwize运算符& (AND)使用掩码0xff给出
???????? ???????? ???????? ????????
&
00000000 00000000 00000000 11111111
=
00000000 00000000 00000000 ????????
例如
00000000 00000000 00000011 00000011
&
00000000 00000000 00000000 11111111
=
00000000 00000000 00000000 00000011
^________________________^ ^______^
zeroed kept
答案 1 :(得分:0)
Ruby源代码中的VALUE类型通常是32位或64位,因此& 0xFF
将除最低8位之外的所有位设置为0。