Rup*_*ott 54 c bit-manipulation bit-shift long-integer
我很擅长处理比特,并且在编译时遇到以下警告:
Run Code Online (Sandbox Code Playgroud)7: warning: left shift count >= width of type
我的第7行看起来像这样
unsigned long int x = 1 << 32;
Run Code Online (Sandbox Code Playgroud)
如果long我的系统的大小是32位,这将是有意义的.但是,sizeof(long)返回8并CHAR_BIT定义为8建议long应为8x8 = 64位长.
我在这里错过了什么?是sizeof和CHAR_BIT不准确还是我误解了一些基本的东西?
Jam*_*lis 78
long可能是64位类型,但1仍然是int.你需要做1一个long int使用L后缀:
unsigned long x = 1UL << 32;
Run Code Online (Sandbox Code Playgroud)
(你也应该unsigned使用U我所示的后缀,以避免左移有符号整数的问题.当a long为64位宽并且你移位32位时没有问题,但如果你使用它会有问题移位63位)
小智 16
unsigned long是32位还是64位,具体取决于您的系统.unsigned long long总是64位.你应该这样做:
unsigned long long x = 1ULL << 32
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54163 次 |
| 最近记录: |