gpt4 book ai didi

c - 数组输出指针

转载 作者:行者123 更新时间:2023-12-02 08:31:38 25 4
gpt4 key购买 nike

我在 C 中有以下程序:

main() {
int arr[5]={100,200,300};
int *ptr1=arr;
char *ptr2=(char *)arr;
printf("%d\n",sizeof(int));
printf("%d %d",*(ptr1+2),*(ptr2+4));
return 0;
}

其输出如下:

4
300 -56

请解释最后的输出。根据我的理解,最后的输出应该是 44 而不是 -56。

最佳答案

您正在挑选 arr[1] 的第一个八位字节。您的机器是 4 字节 int 的小端,因此组成 arr[1] 的 4 个八位字节是,写为十进制:

200, 0, 0, 0

所以您将八位字节 200 解释为 char。您的 char 已签名,您的机器使用 two's complement .

200的二进制表示是

11001000

由于设置了最高有效位,因此当作为有符号值查看时,这是一个负数。因此,为了计算出负值的大小,我们将位取反,然后加一。

00110111

是十进制的 55。因此输出值是-56。

关于c - 数组输出指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com