第一题:变量类型不同赋值
char a = 255; int b = a; printf("b=%d\n", b);
255->1111 1111
又因为char(1字节)为有符号数
int(4字节)
规则:字节数少的数据赋值给字节数多的空间,高位补符号位
字节数多的数据赋值给字节数少的空间,高位溢出
(计算机存入255的二进制是补码形式)
高位补符号位((1111 1111) (1111 1111) (1111 1111) )(符号位:1)111 1111)(补码)
1111 1111 1111 1111 1111 1111 1111 1110(反码)(补码减一)
计算机将输出源码对应的%d(10进制)
1000 0000 0000 0000 0000 0000 0000 0001(源码)
->(所以你将看到的值是)-1
第二题:输入两个数交换存储位置
#include<stdio.h>//第二题
void exchange();
int main()
{
exchange();
return 0;
}
void exchange() {
int a, b;
printf("请输入两个数:\n");
scanf("%d%d", &a, &b);
printf("交换前:\n");
printf("a=%d, b=%d\n", a, b);
int temp = a;
a = b;
b = temp;
printf("交换后:\n");
printf("a=%d, b=%d\n", a, b);
getchar(); // 读取并丢弃换行符
}