C语言类型转换

1.自动转换  如:1+'2'  //字符2转为50

2.隐式转换  如:int a;char b = a;
3.强制转换  如:char a = (int)'2'

一:自动转换

当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:

C语言类型转换

二:隐式转换 


(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.强制转换

强制转换这个问题没啥说的,大家应该都知道