为什么下面的代码输出为-127。为什么不应该为-1?
#include<stdio.h>
int main(){
int a = 129;
char *ptr;
ptr = (char *)&a;
printf("%d ",*ptr);
return 0;
}
可以理解如下:
我们都知道(signed)的范围char
是from [-128 to 127]
,现在让我们将该范围分解为二进制格式,因此所需的位是8
(1
Byte)
0
:0000 0000
1
:0000 0001
2
:0000 0010
3
:0000 0011
...
126
:0111 1110
127
:0111 1111
< - MAX +已经数量后,我们将在符号位溢出
-128
:1000 0000
< -奇异数的数目和其2的补码相同。
-127
:1000 0001
-126
:1000 0010
...
-3
:1111 1101
-2
:1111 1110
-1
:1111 1111
因此,现在回到问题所在, int a = 129;
很明显,129
当存储在char
数据类型内部时,由于最大正允许值是,它将溢出127
。但是为什么我们得到了-127
而不是其他东西?
129
is的简单二进制等效形式1000 0001
,对于char
周围的数据类型,
127
:0111 1111
-128
- 1000 0000
-127
:1000 0001
<-在这里!
-126
:1000 0010
...
因此,我们得到-127
何时129
存储在其中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句