c语言类型转换有哪些,C语言类型转换
1.自动转换,例如:1 2 //字符2到50
2.隐式转换如:int a;char b=a;
3.强制转换,例如:char a=(int)2
一:自动转换当操作不同类型的数据时,要先转换成相同的数据类型,再进行操作。转换规则是从低级到高级。转换规则如下图所示:
二:隐式转换
(1)相同数据类型之间的转换
1.有符号数据类型——3354“无符号数据类型”
short int n=-1;
无符号短整型m=n;
-1的二进制数是[10000000 000001]
-1的倒数是[11111111111111110]
-1的补码是[11111111 11111]
规则:M是一个无符号数,所以可以不经转换直接使用,即M=(2 ^ 16)-1=65535(因为正数的补码=原码)
2.无符号数据类型33543354“有符号数据类型”
无符号字符n=-1;
char m=n;
-1的二进制数是[1000 0001]
-1的倒数是[1111 1110]
-1的补码是[1111 1111]
规则:M是有符号数,所以要转换,取最高位作为符号位,然后把后面的位反过来加一。
倒数:[1000 0000]
添加:[1000 0001]
结果:m=-1
进行上述类型转换的规则:
不考虑原始数据类型,先将值转换为位补码(正补码=原码负补码=原码逆1),将补码相加得到A,然后对补码进行运算:如果是无符号数,则结果为A,如果是有符号数,则结果为A逆加1。
(2)不同数据类型之间的转换
1.无符号短长度数据类型33543354“无符号/有符号长长度数据类型”
无符号字符n=-1;
short int m=n;
-1的二进制数是[1000 0001]
-1的倒数是[1111 1110]
-1的补码是[1111 1111]
规则:下半部分不变,上半部分用0完成。
完成:[0000 0000 1111 1111]
结果:m=255
2.有符号短长度数据类型33543354“无/有符号长长度数据类型”
char n=-1;
无符号短整型m=n;
-1的二进制数是[1000 0001]
-1的倒数是[1111 1110]
-1的补码是[1111 1111]
规则:下半部分不变,上半部分由符号位[xxxxxxxx x 1111111]完成
完成:[1111 1111 1111 1111 1111]
结果:m=65535
3.长长度数据类型——3354 "短长度数据类型
int n=-1;
char m=n;
-1的二进制数是[10000000 000001]
-1的倒数是[11111111111111110]
-1的补码是[11111111 11111]
规则:直接切下半部分。
拦截:[1111 1111]
倒数:[1000 0000]
添加:[1000 0001]
结果:m=-1
示例代码:
int n=-1;
无符号字符I=n;
char j=n;
printf(%d %d\n ,I,j);
//输出:255 -13。关于强制的问题没什么好说的。大家应该都知道吧。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。