我在Java代码中见过这个。
int n = 300 //passed through a function
size = (n + 31) >> 5 //size = 10
数字5
的意义是什么?
数字31
的意义是什么?//可能与int类型大小有关(31位+1个符号)
谢谢
我在Java代码中见过这个。
int n = 300 //passed through a function
size = (n + 31) >> 5 //size = 10
数字5
的意义是什么?
数字31
的意义是什么?//可能与int类型大小有关(31位+1个符号)
谢谢
size = (n + 31) >> 5
将size
设置为ceiling(n/32)
,这是存储n
位标志所需的32位整数的数量。
将31加到n
上是为了确保被除数至少与n
大于或等于的最小32的倍数一样大。
(n + 31) / 32
,意思是“获取 n / 32 的上限”-这对于每个数字都有效,即(n + x - 1) / x
将是一般解决方案。移位而不是除法也混合在这里,但这是一个单独的话题,我认为这里的大多数人都已经知道了。 - Voon < 0
,则它并不相等,所以编译器不能在所有情况下避免除法,因此如果你知道n > 0
(而编译器并不知道),或者你确实想要对负数进行不同的解释,那么这可能会有所帮助。(请注意,即使 n 可能为负数,编译器仍然可以通过更多的工作来欺骗一点并避免除法。) - Voo