认识unsigned和signed取值范围

在C/C++中,char类型和int类型是等价的,只是char类型固定8bit,而int则根据机器位数不同分为16bit和32bit。

先讨论比较简单的char类型,

unsigned char,无符号字符型,也就是说八位全部用来表示数值

所以其取值范围为00000000-11111111也就是0-2^8-1  0-255


char ,一般默认是signed char,但不同的编译器可能处理的不一样,这里我们默认是按signed char来讨论,也就是最高位为符号位

所以真正有效的数值位只有7位

1 1111111-0 1111111

把红色部分的符号位转化为+ -后就很好理解了

- 2^7-1 ~  +2^7-1   ----> -128~127


对于int 和long 的讨论过程完全一样,

int  32位的情况

unsigned int   0       ~     2^32-1

signed int      -2^31-1  ~   +2^31-1   

就不再赘述了,之所以写这篇,因为笔者再面试的时候被问到了,虽然是个小问题,如果不理解原理,关键时候是会犯糊涂的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值