#include<stdio.h>
#include<stdlib.h>
void main()
{
int a = -3;
unsigned int b = 2;
long c = a + b;
printf("%ld\n",c);
}
下列C程序执行后c输出结果为()
A.-1
B.4294967295
C.0x7FFFFFFF
D.0xFFFFFFFF
题中有两个考察点,隐式类型转换及32,64位机器。
首先是隐式类型转换:
C语言默认的隐式转换规则:
char,short --> int --> unsigned --> long --> double <-- float
题中没说机器是32位还是64位,所以我们要考虑在不同环境下的输出值。
16位编译器(字节) char : 1 (elemtype)*: 2
(指针变量) short int : 2 int: 2 unsigned int : 2 float: 4 double: 8 long: 4 long long: 8 unsigned long: 4
32位编译器
char : 1 (elemtype)*: 4 short int : 2
int: 4 unsigned int : 4 float: 4 double: 8 long: 4