为什么`&在Ruby源代码中执行这样的0xff`?

时间:2016-01-07 06:31:23

标签: c ruby

在ruby.h中,我发现很难理解这个宏:

#define SYMBOL_P(x) (((VALUE)(x)&0xff)==SYMBOL_FLAG)

我不知道为什么使用&执行此0xff操作。每个数字& 0xff都不等于自己吗?

2 个答案:

答案 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。