C语言类型转换
1.自动转换 如:1+'2' //字符2转为50
2.隐式转换 如:int a;char b = a;
3.强制转换 如:char a = (int)'2'
一:自动转换
当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:
二:隐式转换
(1)相同数据类型之间的转换
1.有符号数据类型————》无符号数据类型
short int n = -1;
unsigned short int m = n;
-1 的二进制为[10000000 00000001]
-1 的反码为 [11111111 11111110]
-1 的补码为 [11111111 11111111]
规则:m为无符号数,因此不用换算,直接就用,就为m = (2^16) - 1 = 65535
2.无符号数据类型————》有符号数据类型
unsigned char n = -1;
char m = n;
-1 的二进制为[1000 0001]
-1 的反码为 [1111 1110]
-1 的补码为 [1111 1111]
规则:m为有符号数,因此要换算,取高位为符号位,后面的位取反再加一
取反:[1000 0000]
加一:[1000 0001]
结果:m = -1
(2)不同数据类型之间的转换
1.无符号短长度的数据类型————》无/有符号长长度的数据类型
unsigned char n = -1;
short int m = n;
-1 的二进制为[1000 0001]
-1 的反码为 [1111 1110]
-1 的补码为 [1111 1111]
规则:低位部分不变,高位用0补全
补全:[0000 0000 1111 1111]
结果:m = 255
2.有符号短长度的数据类型————》无/有符号长长度的数据类型
char n = -1;
unsigned short int m = n;
-1 的二进制为[1000 0001]
-1 的反码为 [1111 1110]
-1 的补码为 [1111 1111]
规则:低位部分不变,高位用符号位补全[xxxx xxxx 1111 1111]
补全:[1111 1111 1111 1111]
结果:m = 65535
3.长长度的数据类型————》短长度的数据类型
short int n = -1;
unsigned short int m = n;
-1 的二进制为[10000000 00000001]
-1 的反码为 [11111111 11111110]
-1 的补码为 [11111111 11111111]
规则:直接截取低位部分
截取:[1111 1111]
取反:[1000 0000]
加一:[1000 0001]
结果:m = -1
3.强制转换
强制转换这个问题没啥说的,大家应该都知道