数据的取值范围

举例

我们以signed的char为例:

0000 0000

其中最高比特位是符号位

那剩下的7个就是数值位了

对于原码

1 111 1111对应 -127

0 111 1111 对应127

那取值范围是-127~127吗?

对于七位数据位,取值范围是0-127

我们发现当符号不同的时候,0出现了两次

分别是:

0 0000000

1 0000000

我们默认使用0 0000000为0

那1 0000000用来表示-128

所以char的正确取值范围是-128~127(-2^7,2^-1)

-128/有符号1000 0000的具体解释

-128存的过程:

-128的原码:1 1000 0000(9个bit位,出现9个bit位是因为计算机硬件参与运算的,)

反码:1 0111 1111

补码:1 1000 0000

将补码放入char类型的空间时会发生截断,存的是1000 0000

所以char中自然1000 0000用来表示-128

-128取得过程

char是有符号数,有符号位

1000 0000是负数

那反码是0111 1111

原码 是0000 0000 对吗?

不对的,之前发生过截断,无法正确计算原码

所以对于-128是半计算,半规定的一种存取方式

计算体现在存上,规定体现在取上

所以对于1000 0000我们不需要原反补转换

直接解释为-128

推论:

char -2^7~2^7(几次方就是数据位位数)

short -2^15!2^15

int -2^31~2^31

......

题目:

下面代码打印多少

int main()
{
    char a[1000];
    for(int i=0;i<1000;i++)
    {
        a[i]=-1-i;
    }
    printf("%d",strlen(a));
}

打印255

我们知道strlen碰到/0终止

 

-1在加到-128时变为正数127

再加127变为0

所以当a[i]=0时,i=255

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你生活有惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值