我有点困惑,因为我想unsigned long在我的系统上初始化一个大小为8字节的类型的变量(在我认为的每个现代系统上).当我想分配1 << 63给变量时,我得到一个编译器警告但是数字实际上是0.当我这样做时,1 << 30我得到了预期的结果2 ^ 30 = 1073741824.然而,当我这样做时1 << 31,我得到了2 ^ 64(我认为;实际上这不可能)打印的结果18446744071562067968.
unsigned long
1 << 63
1 << 30
2 ^ 30 = 1073741824
1 << 31
2 ^ 64
18446744071562067968
任何人都可以向我解释这种行为吗?
c unsigned bit-shift
bit-shift ×1
c ×1
unsigned ×1