前言:众所周知在C语言中,仅仅就4种数据类型 ---- 整型,浮点型,指针,聚合类型(数组和结构),其他的类型都是从者四种类型种派生出来的。但不同类型之间如果我要对其进行赋值会发生什么。
# 不同类型的整型之间的赋值问题
在C语言中允许不同类型的整数之间可以相互赋值
char a; //8bits
int b; //32bits
short c; //16bits
a = b; //YY
c = a; //YY
为什么长度,不一样,你如何赋值的!
很标准的一个C语言的建议:
(1)、长 ------ 短
高字节直接就pass(丢弃),低字节直接拷贝
(2)、短 ----- 长
低字节直接拷贝,高字节我们补什么呢?
if 短的是有符号位,高位就全部补符号位
if 短的是无符号位,高位就全部补0;
eg:
假设运行如下的代码的机器是32bits
unsigned char c = 250;
char d;
d = c+8;
printf("%d\n",d); //2
printf("%u\n",d); //2
c : 8bits
1111 1010
c+8 :
c - > 32 bits : 短的----》长的 c:unsigned , 高位全部补 0
1111 1010
00000000 00000000 00000000 00001000 8
00000000 00000000 00000000 11111010 c
00000000 00000000 00000001 00000010 c+8
c+8 ---》d 长 ----- 》 短 低字节直接拷贝,高字节字节pass
d:
0000 0010