按位移位算子的ISO C99标准说左移:
E1的结果<< E2是E1左移E2位位置;腾出的位用零填充。如果E1具有无符号类型,则结果的值为E1×2E2,比结果类型中可表示的最大值减少一个模数。如果E1具有带符号类型和非负值,并且E1×2E2在结果类型中可表示,那么这就是结果值;否则,行为未定义。
我不明白什么意思是什么意思是说“减少模数比结果类型中可表示的最大值”在移位位的上下文中。
答案 0 :(得分:1)
这基本上是在谈论integer wrapping。如果数学值大于该类型的最大可表示值,则它将换行,即模运算。
答案 1 :(得分:1)
结果类型中可表示的最大值将设置其所有位,而不是单个2的幂。但是,完成模运算的次数(当值开始换行时)是2的幂,即下一个,可以通过将一个加到最大的可表示值来获得。