这段代码的目的是什么?是在计算位数吗?

时间:2015-09-04 09:05:44

标签: c++ c

   if ((16 << (int)(4*((num.length()-2)-i))) == 0)

这是什么意思?这有点操纵吗?如果只计算数字,那么写得更简单,这就是为什么我认为它可能与我所知的不同。

1 个答案:

答案 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,但可以是其他值。