c语言有符号数取值范围

c语言中有符号数的取值范围问题:

比如char类型 [-128,127],当为正数时 0111 1111(二进制)对应十进制 127,这没有任何问题。

但是当为负数时 -128 是怎样得到的呢?

最高位为1时候代表负数,我们通常会认为11111111的时候是最小值即-127(当表示原码的时候 最小值-127是对的)
其实不是这样的,因为计算机是采用的补码形式,根据补码的规则11111111应该是个负数
11111111 反推过去(减1 取反)会得到原码是00000001,所有它代表是数字1,所以11111111是-1的补码
同理
[-1]=1111111
[-2]=1111110
[-3]=1111101
[-4]=1111100
................


[-128]10000000
10000000是最小的值了
-128是这样来的。

其它的数据类型也是类似的道理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值