此代码的目的是什么?它是在计算位数吗?

what's the purpose of this code? is it counting number of digits?

本文关键字:计算 代码 是什么      更新时间:2023-10-16
   if ((16 << (int)(4*((num.length()-2)-i))) == 0)

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

<<为左移运算符。左移一个n等于乘以2 n乘以。如果你移动得足够远,所有的设置位都将"跌落到边缘",结果将是0

如果n > sizeof(int)* BITS_PER_CHAR - 4, 16 << n将变成0

所以表达式可以写成

if ((sizeof(int) * BITS_PER_CHAR - 4) < (int)(4*((num.length()-2)-i))

BITS_PER_CHAR在任何posix兼容的系统上都是8。sizeof(int)*BITS_PER_CHAR通常是32,也可以是其他值