C语言设计中的unsigned int 和signed int的区别解释

废话不多说直接进入主题:无符号的int和有符号的int的理解和代码演示,首先要知道计算机存储和运算数据都是按照补码方式存储的,不过int是负数的时候呢?

这就涉及到了数据的 原码  反码 补码,正数的原码和补码是一样的,反码的话就是~(取反)

负数的话 原码 的最高位是用来表示符号位的 0是整数 1是负数,反码~(除了符号位)、

补码就是在反码的基础上+1

下面用代码举例子:

 

上面b=-20 在计算机存储是补码的形式 -20的原码是 1000...10100,先求反码~得1111...01011

接着反码+1就是补码:1111...0101100在计算机中存储

在计算int和uint 时会把int当做uint参加运算 也就是全部bit都是数据bit,所以这里的-20如果和6对比的话是会输出 “>6”的。6的原码和补码相同都是0.....110  而此时的-20是1111...0101100 显然都当做是uint 来对比的话 -20一定是大于6的 32b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值