我对处理位非常陌生,并且在编译时遇到以下警告:
7: warning: left shift count >= width of type
我的7号线是这样的
unsigned long int x = 1 << 32;
如果大小是有意义的long
我的系统上是32位的。然而,sizeof(long)
回报8
and CHAR_BIT
定义为8
建议 long 应该是 8x8 = 64 位长。
我在这里缺少什么?是sizeof
and CHAR_BIT
不准确或者我误解了一些基本的东西?
long
可能是 64 位类型,但是1
仍然是一个int
。你需要做1
a long int
使用L
suffix:
unsigned long x = 1UL << 32;
(你还应该做到unsigned
使用U
正如我所展示的后缀,以避免左移有符号整数的问题。没有问题,当long
是64位宽,移位32位,但移位63位就会有问题)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)