```
#include <stdio.h>

int main()
{
    int e = 100;
    printf("%x %x \n", 1<<(100), 1<<e);
    printf("%x %x \n", 0xffffff<<(100-23), 0xffffff<<(e-23));

}

```

output

```
main.c:14:25: warning: left shift count >= width of type [-Wshift-count-overflow]
     printf("%x %x \n", 1<<(100), 1<<e);
                         ^~
main.c:15:32: warning: left shift count >= width of type [-Wshift-count-overflow]
     printf("%x %x \n", 0xffffff<<(100-23), 0xffffff<<(e-23));
                                ^~
0 10 
0 ffffe000 

```

I don't know why this happens, could anybody explain this to me? I think both should be 0, but what compilers did there ?