🌑

Hi,Friends.

😉 获取中...


c小问题

c语言小问题

直接来看代码,然后推断下面代码输出为什么?

char a = 127;
   printf("a=%d\n", a + 1);
   char b = 127;
   b++;
   printf("b=%d\n", b);

这个题目一看就觉得很难简单是吧,不就是两个数+1嘛!

不出意外的话,你首先想到的应该是这个:

a = 128
b = 128

好了,不卖关子了,真实结果是这样的:

a=128
b=-128

是不是觉得不可思议,为什么同一个类型的值同时进行了一个“+1”操作,结果却是不一样的呢?

接下来说说原因:

计算机中运算是进行二进制的运算的,因此不管a还是b,在运算时初始值都是一个字节,二进制为0111 1111,进行+1操作后就是1000 0000,上面只是计算公式结果,解读为128,而下面char型变量,是有符号数,范围是-128~127,所以这个数就是-128。

也可以这么理解,第一个编译器可能认为是unsiged char,第二个可以强制认为b就是char。

— 2021年10月16日

Made with ❤ and Hexo.js