吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C中的整数提升

C中的整数提升

来源:网络 | 更新时间:2022-01-08 12:29:24
某些数据类型,如charshort int占用的字节数比int 少,当对它们执行操作时,这些数据类型会自动提升为intunsigned int。这称为整数提升。例如,在charshortenum等较小的类型上不会发生算术计算。它们首先被转换为intunsigned 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。但是整数提升发生在对 char 类型进行的算术运算中,我们得到适当的结果而没有任何溢出。 考虑以下程序作为另一个示例
#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' 是signed char,当它转换为int 时,其值变为 -5(有符号值为 0xfb)。'b' 是unsigned char,当它转换为int 时,它的值变为 251。值 -5 和 251 作为int 的表示不同,因此我们得到的输出为“Not Same”。 我们将很快讨论有符号和无符号、int 和 long int 等之间的整数转换规则。  

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com