Ах, ответ очевиден, если разбить выражение:
Новый код:
#include <stdio.h>
int divideBy2Power(int x, int y)
{
int a = x >> y;
int b = x < 0;
int c = x << (32-y);
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("c=%d\n", c);
printf("b&&c=%d\n", (b&&c));
return a + (b && c);
}
int main()
{
printf("%d\n", divideBy2Power(-2, 0));
return 0;
}
Тогда вы ясно видите, что b = 1, c = -2, поэтому b && c = 1.