C语言踩坑之无符号和有符号相遇

C语言踩坑之无符号和有符号相遇

##32位机,visual studio code##
(注意,我的编译的软件是visual studio code,不同编译软件有符号和无符号运算结果可能会有差异。。。。。。我也是挺无语的)

最近踩到了一个坑,C语言有符号和无符号数据相遇的情况 :
1.运算
2.判断

直接上图:
在这里插入图片描述

有符号的a,和无符号的b,可以看到:

  1. result1结果显示(a>b)?a:b的最终结果为a的值-2,说明三元表达式的执行结果是a的值大于b的值,但是为什么-2会大于1呢?原因就是C语言在判断的时候将a的值转换成了无符号的值,-2的十六进制为0xFFFF FFFE,1则是0x0000 0001,按照无符号作比较的话当然是a大于b了。
  2. result2非常容易使人迷惑,可能有人会和result1的过程搞混。在这里的结果为1,说明-2>1的结果为假,并没有发生无符号和有符号之间的转变,因为C语言默认的整型是int类型,是带符号的(顺便提一下,C语言默认字符是char型,默认浮点数为double型)。
  3. result3同result2
  4. a+b的结果为-1,验证了有符号和无符号在计算中会转换成有符号计算(如果转换成了无符号的话,结果是将一个非常大的值 , 为unsigned int的最大值0xFFFF FFFF,2^32-1)。

不足之处请各位大佬指正!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值