在ruby.h中,我很难理解这个宏:
#define SYMBOL_P(x) (((VALUE)(x)&0xff)==SYMBOL_FLAG)
我不知道为什么用
&
执行此0xff
操作。每个数字& 0xff
都不相等吗? 最佳答案
&是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
关于c - 为什么在Ruby源代码中以这种方式执行`&0xff`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34648685/