Как проверить, содержит ли переменная int без знака отрицательное число?

У меня есть следующий код:

int main()
{ 
    int i;
    unsigned int j;

    printf("Type a number:  ");
    scanf("%d", &i);

    j = i;

    if (________)
    {
        printf("Negative!\n");
    }

    return 0;
}

Что бы я вставил в оператор if, чтобы проверить, содержит ли переменная без знака "j" отрицательное число?

4 ответа

Вы можете сделать это просто:

  if((int)j < 0) 
  {
   printf("Negative!\n");
  }

Вы можете просто проверить переменную i как например

if ( i < 0 )
{
    //...
}

или вы могли бы написать, например,

if ( j > INT_MAX )
{
    //...
}

потому что внутреннее представление неотрицательных значений типа int совпадает с внутренним представлением одинаковых значений типа unsigned int, По крайней мере, это будет работать для представления 2 дополнения целых чисел.

И наконец вы можете проверить бит знака.

Это один из способов сделать это:

#include<stdio.h>
/* This is in easier to verify example.
 * I have used char to represent integers that fits in one byte.
 * char is one byte in my system
 * In case of an overflow, the numbers are wrapped around.
 * You could check with bigger types as you please.
 */

int main(void)
{
unsigned char x;
char y;
        printf("Size of char is %zd\n",sizeof(char));
        printf("Enter an integer : ");
        scanf("%d",&x);
        y=x;
        printf("Number is %s when converted to signed\n",\
                             (y>=0?"positive":"negative"));
return 0;
}

Проверяя то же самое с INT_MIN или же INT_MAX требует от вас включить limits.h заголовочный файл Манипулирование битами, как указал Дэвид, - еще один вариант.

int i;
unsigned int j;

// store a value in i

j = i;

Чтобы проверить, j содержит отрицательное число:

if (0)
{
    printf("Negative!\n");
}

Целое число без знака никогда не может содержать отрицательное значение.

Если значение i отрицательный, тогда он будет преобразован в некоторое положительное значение, когда вы назначаете его j, Если вы хотите знать, является ли значение i отрицательно, вы должны проверить iне j,

if (i < 0) {
    puts("i is negative");
}
else {
    puts("i is not negative");
}
puts("j is not negative");

Обратите внимание, что преобразование значения j вернуться к int не надежно Преобразование значения, превышающего INT_MAX печатать int выдает результат, определяемый реализацией (или выдает сигнал, определяемый реализацией). Весьма вероятно, что вы вернете исходное значение iа зачем? Если вы хотите проверить значение iпроверить значение i,

Другие вопросы по тегам