C语言类型转换和负数的无符号输出

1.类型转换的相关概念
(1)类型转换分类:自动类型转换(简称“自转”)和强制类型转换(简称“强转”)。
(2)类型提升:编译器对操作数进行运算前,将所有操作数都转换成取值范围较大的操作数类型。
(3)类型提升目的:避免数据信息丢失。因为由于级别高的数据类型比级别低的数据类型所占的内存空间大,可以保持数据类型的精度。
(4)整数提升:char型和short型进行运算前都自动提升为int型,C99和C11中还可以产生向unsigned int型的转换。
(5)类型提升规则:根据操作数类型由低到高进行转换。如图所示,箭头方向表示转换方向,纵向箭头表示必然转换,横向箭头仅表示转换方向不表示转换过程。

比如:一个int型操作数与一个float型操作数进行算数运算,编译器会先将int型直接转换成float型,无需经过int型先转换为unsigned int型再转换为long型的中间过程。
特例:如果一个操作数是long型,另一个是unsigned int型,同时unsigned int型操作数的值又不能用long型表示,则两个操作数都转换为unsigned long型。

2.类型转换的几种情况
(1)赋值中的自动类型转换:赋值运算符左侧(目标侧)变量的类型和右侧表达式的类型不一致,则右侧表达式的值自动转换成左侧变量的类型。
比如:int n = 2; float f = 3.5; double d = n+f,编译器运算n+f时,会将变量n的类型提升为变量f相同的float型,n+f为变量d赋值时,会将float型的运算结果自动转换为double型再赋值给d。
(2)高数据类型转换低数据类型:可能丢失信息。
比如:int转char会丢失高24位,float转int会丢失小数部分(在某些情况下整数部分的精度也会丢失),double转float会丢失小数部分精度(四舍五入)。
(3)低数据类型转换高数据类型:改变数据形式,不会丢失信息。
(4)无符号数据类型(unsigned型)和有符号数据类型(signed型)之间的转换
①unsigned和signed都只能定义整型数据(short,int,long)和字符型数据(char型可以看成特殊的int型),所以un

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值