if ((16 << (int)(4*((num.length()-2)-i))) == 0)
这是什么意思?这有点操纵吗?如果只计算数字,那么写得更简单,这就是为什么我认为它可能与我所知的不同。
答案 0 :(得分:4)
<<
是左移算子。 n
向左移动与乘以n
次相同。如果你移动得足够远,所有设置位将“落在边缘”,结果将是0
。
16 << n
, 0
将成为n > sizeof(int)* BITS_PER_CHAR - 4
。
因此表达式可以写成:
if ((sizeof(int) * BITS_PER_CHAR - 4) < (int)(4*((num.length()-2)-i))
在任何符合POSIX标准的系统上, BITS_PER_CHAR
为8。 sizeof(int)*BITS_PER_CHAR
通常为32
,但可以是其他值。