lcc编译器源码片段问题
本帖最后由 ne555lm386 于 2014-10-3 19:46 编辑//计算16进制的值,结果保存在n中if (*token == '0' && (*rcp == 'x' || *rcp == 'X')) { int d, overflow = 0; while (*++rcp) { if (map[*rcp]&DIGIT) d = *rcp - '0'; else if (*rcp >= 'a' && *rcp <= 'f') d = *rcp - 'a' + 10; else if (*rcp >= 'A' && *rcp <= 'F') d = *rcp - 'A' + 10; else break; if (n&~(~0UL >> 4)) //这里判断n是否溢出,怎么判断的,请大神解释 overflow = 1; else n = (n<<4) + d;} 0UL就是无符号数0,
~0UL就是全1,如11111...1111
~0UL >> 4,就是最高4位为0,其余位都为1,如000011...1111
~(~0UL >> 4),就是最高4位为1,其余位都为0,如111100...0000
if (n&~(~0UL >> 4))意思就是如果n的二进制表示的最高4位不都为0,则。。。
至于这样判断的根据,上述代码给的信息量不足,无法描述。 额,你能不能把程序贴完整点来看看? JayChen 发表于 2014-10-3 20:33
额,你能不能把程序贴完整点来看看?
解释 if (n&~(~0UL >> 4)) 这句话意思就行了 期待大侠指导 学习 仰望天上的光 发表于 2014-10-3 19:33
0UL就是无符号数0,
~0UL就是全1,如11111...1111
~0UL >> 4,就是最高4位为0,其余位都为1,如000011...1 ...
恩,不错,我懂了
页:
[1]