clox 中的一些值的设定
>> hex2decimal(0x7ffc000000000000)
out> 9222246136947933184
>> decimal2binary(9222246136947933184)
out> 111111111111100000000000000000000000000000000000000000000000000
------------------------
0111,1111,1111,1100;00000000,00000000;00000000,00000000;00000000,00000000
定义符号位 SIGN_BIT 为64位无符号整数0x8000000000000000
#define SIGN_BIT ((uint64_t)0x8000000000000000)
#define QNAN ((uint64_t)0x7ffc000000000000)
定义 QNAN 是64位无符号整数
判断是否是数
#define IS_NUMBER(value) (((value) & QNAN) != QNAN)
即凡是不以0x7ffc开头的都不是NUBMER, 以0x7ffc开头的都是obj
// QNAN=0x7ffc000000000000
//TAG_FALSE=0x0000000000000010
// TAG_TRUE=0x0000000000000011
//FALSE_VAL=0x7ffc000000000010
// TRUE_VAL=0x7ffc000000000011
(SIGN_BIT | QNAN)
1111,1111,1111,1100;00000000,00000000;00000000,00000000;00000000,00000000
取反
0000,0000,0000,0011;11111111,11111111,11111111,11111111,11111111,11111111
#define AS_OBJ(value) \
((Obj*)(uintptr_t)((value) & ~(SIGN_BIT | QNAN)))
AS_OBJ() 函数就是将 value 和上面的值 0x3ffffffffffff 作与运算