Предполагая представление дополнения до двух (не всегда!), Это может быть достигнуто путем проверки, установлен ли самый старший бит (в этом случае число является отрицательным).
Обратите внимание, что следующий код использует недопустимые операции (+
, *
и -
), но они предназначены только для ясности и независимости от платформы. Если вы знаете больше о вашей конкретной платформе, например, что int
является 32-битным числом, соответствующие константы могут быть заменены их числовым значением.
// Will be 1 iff x < 0.
int is_neg = (x & (INT_MAX + 1)) >> (CHAR_BIT * sizeof(int) - 1);
// Will be 1 iff x != 0.
int is_not_zero = !!x;
return !is_neg & is_not_zero;