待到秋来九月八,我花开尽百花杀
-1和255的区别
了解了负数在计算机内存中的储存方式,也知道了计算机如何计算这些数,那么就生成了另外一个问题,-1和255有什么区别,同理还有许多负数与正整数发生了重叠的问题,就像是-1和255的在内存中的表示都是1111 1111,计算机是如何区分这些的呢?
参考:
比如
1111 1111 + 0000 0010
计算机算出
进位=1,值 = 0000 0001
编译器这时就要分辨,如果输出要求是有符号输出的,则输出1 。如果输出要求无符号输出就按255+2输出,但要知道char最高位为8比特,最多表示为255,再+2就溢出了,输出表示仍然是1 。
(要解释一下,char进入CPU时要进行整型提升,255和-1实际存入的是 1 1 1111 1111,所以如果直接无符号输出的话可能是,同样这也是整形的最大表示数,再+2,就会溢出,即便是强转int型也要输出的是1 。参考:)
我们可以实验一下:
#includeint 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
#includeint 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;}
【1和255有什么区别?】(注意:之所以输出了是整型提升的结果!)
- 李世民最爱的女儿为什么竟因和尚上吊自杀?
- 曹操的死竟与华佗存有关系曹操死亡真相
- 明孝陵未解之谜:朱元璋有没有葬在地宫
- 揭秘:孔融让梨的故事中的孔融最终有何作为?
- 吴三桂有没有称帝?吴三桂到底是个什么样的人
- 颜真卿代表作是什么?颜真卿的书法有何特点
- 纪晓岚的故居是什么样的?纪晓岚有几个儿子
- 唐太宗李世民一生有何政绩?唐太宗李世民简介
- 北宋宰相苏辙的故事苏辙的轶事典故有哪些
- 北宋权相蔡京的故事蔡京的轶事典故有哪些