#define HT_INVALID_IDX ((uint32_t) -1)
#define HT_HASH_SIZE(nTableMask)
(((size_t)(uint32_t)-(int32_t)(nTableMask)) * sizeof(uint32_t))
最近在看php7源码,发现有的地方直接用数据类型加减 ,问下有人知道什么意思吗? ((uint32_t) -2) 结果是 4294967294,也就是 2^32-2 。 目测是指 这个类型所能表示的最大值。 但想要一个确定的语法说明。
哪位大神知道,麻烦说明一下,感谢感谢。
只是强制类型转换,利用了负数的二进制表示方式。
比如,-1 在32位下
原码为: 10000000 00000000 00000000 00000001
反码为 11111111 11111111 11111111 11111110
补码为 11111111 11111111 11111111 11111111
所 (uint32_t)-1) 其实就是 0xFFFFFFFF。
HASH SIZE是三步:
n = (int32_t)(nTableMask)
a = ((sizet)(uint32t) (-n)
SIZE = a * sizeof(uint32_t))