在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/

10-11 21:17