bor*_*ero 6 c unsigned bit-shift
我有点困惑,因为我想unsigned long在我的系统上初始化一个大小为8字节的类型的变量(在我认为的每个现代系统上).当我想分配1 << 63给变量时,我得到一个编译器警告但是数字实际上是0.当我这样做时,1 << 30我得到了预期的结果2 ^ 30 = 1073741824.然而,当我这样做时1 << 31,我得到了2 ^ 64(我认为;实际上这不可能)打印的结果18446744071562067968.
任何人都可以向我解释这种行为吗?
P45*_*ent 12
1 << 63将在int算术中计算,你int的大概是32位.
通过推广其中一个论点来解决这个问题:1ULL << 63会做到这一点.
ULL 表示表达式至少为64位.