C语言类型转换的问题

大家可能都犯过类似的错误,char与unsigned char没有区分使用(不仅是初学者最容易犯的错误),特别是字符以16进制"%02x"输出时,输出结果比较奇怪,本该输出0xff(1byte),而输出的却是0xffffffff(4byte),其原因是本该使用unsigned char我们却使用了char。你可能知道是我们用错了数据类型,换过来了觉得很简单,而没有去理解其中的原因。下面这个例子可帮助你找到原因。

理解2个概念就知道为什么会这样:

1)数据是以补码形式存储于内存中;

2)格式化输出的类型:%d为十进制整型输出,%u为无符号十进制整型输出。

c=4294967295的原因是,-1以%u无符号整形(4个字节)的补码形式(4字节32个二进制1)输出,其十进制正是4294967295。

a=255的原因是,-1在赋予a(1个字节)时,是以补码形式(1字节8个二进制1)存储于a的内存,其十进制正是255。255以%u无符号整形(4个字节)的补码形式输出自然就是255。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值