未定义行为
3 << 64 的类型为 signed int,3的具符号二进制至少需要3bits,即你最多只能移动 [sizeof(signed int)*8 - 3] 位,否则就是未定义行为
移位操作Bitwise shift operators
2. 每个操作数都应当为整型
3. 每个操作数都执行整型提升,结果类型为“左操作数类型提升后的类型”。如果右操作数是“负值”或“
值大于等于左操作数的宽度”,其行为未定义。
4. E1<<E2的结果是E1左移E2位;空出的位以0填充。
当 E1 为无符号类型时,结果等于“(E1*"2的E2次方")%"结果类型的最大值+1"”;
当 E1 为具符号类型时,如果 值非负 且 结果类型能表达(E1*"2的E2次方"),那么(E1*"2的E2次方")就是结果值;
否则行为未定义。
5. E1>>E2的结果是E1右移E2位。
当 E1 为无符号类型时,或E1虽然是具符号类型但值非负时,结果值是 E1/(2的E2次方) 的整数部分;
当 E1 为具符号类型,值为负时,结果值取决于 实现定义。