1. 请问以下类型在32位系统中占用的字节数分别是多少?char、short、int、long、float、double、long double。
答:char:1字节,short:2字节,int:4字节,long:4字节,float:4字节,double:8字节,long double:12字节(在一些编译器中可能会有所不同)。
2. 请问以下代码输出的结果是什么?
```c
int a = 100;
char b = (char)a;
printf("%d,%d", a, b);
```
答:输出结果是“100,100”。char类型在转换时会截取a的低8位,因此b的值也是100。
3. 请问以下代码输出的结果是什么?
```c
int a = 100;
char b = (char)a;
int c = (int)b;
printf("%d,%d,%d", a, b, c);
```
答:输出结果是“100,100,100”。在对char类型进行类型转换时,会将其扩展为int类型,因此c的值也是100。
4. 请问以下代码输出的结果是什么?
```c
int a = 100;
char b = (char)a;
int c = (unsigned char)b;
printf("%d,%d,%d", a, b, c);
```
答:输出结果是“100,100,100”。在对char类型进行类型转换时,如果是无符号类型,会先将其扩展为int类型,再进行类型转换,因此c的值也是100。
5. 请问以下代码输出的结果是什么?
```c
int a = -100;
unsigned int b = (unsigned int)a;
printf("%d,%u", a, b);
```
答:输出结果是“-100,4294967196”。在对有符号类型进行类型转换时,如果其值为负数,会先将其转换为对应的无符号数,再进行类型转换。
6. 请问以下代码输出的结果是什么?
```c
int a = -100;
unsigned char b = (unsigned char)a;
printf("%d,%u", a, b);
```
答:输出结果是“-100,156”。在对有符号类型进行类型转换时,如果其值为负数,会先将其转换为对应的无符号数,再进行类型转换。因为char类型是无符号类型,所以b的值为156,它是-100在[0,255]范围内的补码表示。
7. 请问以下代码输出的结果是什么?
```c
unsigned int a = 0xffffffff;
int b = (int)a;
printf("%u,%d", a, b);
```
答:输出结果是“4294967295,-1”。在对无符号类型进行类型转换时,如果其值为最大值(即全1),会先将其转换为对应的有符号数,再进行类型转换。
8. 请问以下代码输出的结果是什么?
```c
float a = 3.14f;
int b = (int)a;
printf("%f,%d", a, b);
```
答:输出结果是“3.140000,3”。在对浮点类型进行类型转换时,会将其小数部分直接截取,不会四舍五入。
9. 请问以下代码输出的结果是什么?
```c
int a = 0x12345678;
char *p = (char*)&a;
printf("%x,%x,%x,%x", p[0], p[1], p[2], p[3]);
```
答:输出结果是“78,56,34,12”。因为CPU的字节序是小端模式,所以低地址存放的是数据的低位字节。
10. 请问以下代码输出的结果是什么?
```c
int a = 0x12345678;
int b = *((int*)((char*)&a + 1));
printf("%x", b);
```
答:输出结果是“345678”。因为将指针加1后,指向的是a的次高位字节,再将其转换为int指针,就可以得到a的次高位和高位字节组成的整数。