-1和255有什么区别?

待到秋来九月八,我花开尽百花杀

-1和255的区别

了解了负数在计算机内存中的储存方式,也知道了计算机如何计算这些数,那么就生成了另外一个问题,-1和255有什么区别,同理还有许多负数与正整数发生了重叠的问题,就像是-1和255的在内存中的表示都是1111 1111,计算机是如何区分这些的呢?
参考:https://blog.csdn.net/qq_40893595/article/details/104439660

比如
1111 1111 + 0000 0010
计算机算出
进位=1,值 = 0000 0001
编译器这时就要分辨,如果输出要求是有符号输出的,则输出1。如果输出要求无符号输出就按255+2输出,但要知道char最高位为8比特,最多表示为255,再+2就溢出了,输出表示仍然是1。
(要解释一下,char进入CPU时要进行整型提升,255和-1实际存入的是 1111 1111 1111 1111 1111 1111 1111 1111,所以如果直接无符号输出的话可能是4294967295,同样这也是整形的最大表示数,再+2,就会溢出,即便是强转int型也要输出的是1。参考:https://blog.csdn.net/qq_40893595/article/details/104441826

我们可以实验一下:

#include<stdio.h>
int main()
{
 char a = -1;
 char b = 255;
 
 printf("%d\n", a);
 printf("%u\n", b);
 
 printf("%d\n", a + 2);
 printf("%u\n", b + 2);
 system("pause");
 return 0;
}

在这里插入图片描述
这也就验证了上述举例的正确性,那么前述的编译器识别输出的说法怎么证明呢?255和-1太特殊了,我们换一个一般的数就可以证明。
比如 -3 和 253

#include<stdio.h>
int main()
{
 char a = -3;
 char b = 253;
 printf("%u\n", a);
 printf("%u\n", b);
 printf("%d\n", a + 2);
 printf("%u\n", b + 2);
 system("pause");
 return 0;
}

在这里插入图片描述
(注意:之所以输出了4294967293是整型提升的结果!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值