signed和unsigned取值范围的问题

就以char为例,char可以是unsigned和singed类型。

如果是unsigned类型,取值范围是:00000000 —— 11111111 ,即 0——255,一共256个数,这个很好理解。

如果是singed类型,第一位是符号位,0表示正数,1表示负数,那么正数范围是:00000000 ——01111111 ,即0——127,而负数在内存中可存储的范围是:10000000——11111111,即-128—— -1,因为负数在内存中以补码形式存储,除去符号位 000 0000——111 1111正好有128个数字,所以负数取值范围是-1——-128,-1的补码是1111 1111,-128的补码是 1000 0000。


如果对一个变量赋的值超出该类型能容纳的取值范围,编译器会怎么处理呢?

以char为例:

unsigned char c = -1;

unsigned char取值范围是0——255,unsigned char的大小是256,c中实际存储的值是255,即-1%256。


signed char d = 300;

signed char 取值范围是 -128 ——127,signed char 的大小是256,d中实际存储的值是44,即 300%256,许多的编译器都会这样处理,像处理unsigned类型一样,但是我们并不能保证每个编译器都会这么做。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值