使用C中的指针从int变量访问字符

MCG

为什么下面的代码输出为-127。为什么不应该为-1?

#include<stdio.h>
int main(){
    int a = 129;
    char *ptr;
    ptr = (char *)&a;
    printf("%d ",*ptr);
    return 0;
}
苏拉·舒尔(Sourabh Choure)

可以理解如下:

我们都知道(signed)的范围char是from [-128 to 127],现在让我们将该范围分解为二进制格式,因此所需的位是81Byte)

0 0000 0000
1 0000 0001
2 0000 0010
3 0000 0011
...
1260111 1110
1270111 1111< - MAX +已经数量后,我们将在符号位溢出
-1281000 0000< -奇异数的数目和其2的补码相同。
-1271000 0001
-1261000 0010
...
-3 1111 1101
-2 1111 1110
-1 1111 1111


因此,现在回到问题所在, int a = 129;很明显,129当存储在char数据类型内部时,由于最大正允许值是,它将溢出127但是为什么我们得到了-127而不是其他东西?

129is的简单二进制等效形式1000 0001,对于char周围的数据类型,

1270111 1111
-128- 1000 0000
-1271000 0001<-在这里!
-1261000 0010
...
因此,我们得到-127何时129存储在其中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章