warning: left shift count >= width of type
bit-manipulation, bit-shift, c, long-integer
Solution
`long` may be a 64-bit type, but `1` is still an `int`. You need to make `1` a `long int` using the `L` suffix:
unsigned long x = 1UL << 32;
(You should also make it `unsigned` using the `U` suffix as I've shown, to avoid the issues of left shifting a signed integer. There's no problem when a `long` is 64 bits wide and you shift by 32 bits, but it would be a problem if you shifted 63 bits)
Problem
I'm very new to dealing with bits and have got stuck on the following warning when compiling: ``` 7: warning: left shift count >= width of type ``` My line 7 looks like this ``` unsigned long int x = 1 << 32; ``` This would make sense if the size of `long` on my system was 32 bits. However, `sizeof(long)` returns `8` and `CHAR_BIT` is defined as `8` suggesting that long should be 8x8 = 64 bits long. What am I missing here? Are `sizeof` and `CHAR_BIT` inaccurate or have I misunderstood something fundamental?