Рубрики

Целочисленные Акции в C

Некоторые типы данных, такие как char , short int, занимают меньше байтов, чем int , эти типы данных автоматически переводятся в int или unsigned int. когда над ними выполняется операция. Это называется целочисленным продвижением. Например, никакие арифметические вычисления не происходят для меньших типов, таких как char , short и enum . Сначала они преобразуются в int или unsigned int , а затем на них делается арифметика. Если int может представлять все значения исходного типа, значение преобразуется в int . В противном случае он конвертируется в беззнаковое целое.

Например, см. Следующую программу.

#include <stdio.h> 

int main()

{

    char a = 30, b = 40, c = 10;

    char d = (a * b) / c;

    printf ("%d ", d); 

    return 0;

}

Выход:

120

На первый взгляд, выражение (a * b) / c, кажется, вызывает арифметическое переполнение, поскольку подписанные символы могут иметь значения только от -128 до 127 (в большинстве компиляторов C) и значение подвыражения '(a * b) 'равно 1200, что больше 128. Но здесь происходит целочисленное продвижение в арифметике, выполняемой для типов символов, и мы получаем соответствующий результат без каких-либо переполнений.

Рассмотрим следующую программу в качестве другого примера .

#include <stdio.h>

  

int main()

{

    char a = 0xfb;

    unsigned char b = 0xfb;

  

    printf("a = %c", a);

    printf("\nb = %c", b);

  

    if (a == b)

      printf("\nSame");

    else

      printf("\nNot Same");

    return 0;

}

Выход:

a = ?
b = ?
Not Same 

Когда мы печатаем 'a' и 'b', печатается один и тот же символ, но когда мы сравниваем их, мы получаем вывод «Not Same».
'a' и 'b' имеют то же двоичное представление, что и char . Но когда операция сравнения выполняется над «a» и «b», они сначала преобразуются в int. 'a' — это символ со знаком, когда он преобразуется в int , его значение становится -5 (значение со знаком 0xfb). 'b' — это беззнаковый символ , когда он преобразуется в int , его значение становится 251. Значения -5 и 251 имеют разные представления как int , поэтому мы получаем вывод как «Not Same».

Вскоре мы обсудим правила целочисленного преобразования между подписанным и неподписанным, int и long int и т. Д.

Ссылки:
http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_067.HTM

Эта статья предоставлена Абхай Рати . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Целочисленные Акции в C

0.00 (0%) 0 votes

Целочисленные Акции в C

Некоторые типы данных, такие как char , short int, занимают меньше байтов, чем int , эти типы данных автоматически переводятся в int или unsigned int. (далее…)

Целочисленные Акции в C

0.00 (0%) 0 votes