How this program makes the following output? Program
#include<stdio.h>
int main()
{
printf("%x", -1<<1);
getchar();
return 0;
}
Output
fffffffe
How this program makes the following output? Program
#include<stdio.h>
int main()
{
printf("%x", -1<<1);
getchar();
return 0;
}
Output
fffffffe
Left shift of a negative signed integer value is undefined in C.
6.5.7 Bitwise shift operators
- The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. If E1 has an unsigned type, the value of the result is E1 × 2 E2 , reduced modulo one more than the maximum value representable in the result type. If E1 has a signed type and nonnegative value, and E1 × 2 E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.
In your case the type of -1
is signed int
.
The result you're seeing isn't meaningful and is an artifact of the architecture.