gpt4 book ai didi

c++ - 我似乎不明白这个程序关于将整数指针转换为字符指针的输出

转载 作者:太空狗 更新时间:2023-10-29 23:42:33 25 4
gpt4 key购买 nike

在下面的程序中,我将 i 初始化为 255因此在二进制中我们有:

0000 0000 1111 1111

十六进制:

0x 0 0 f f

所以根据 Little-Endian 布局:首先存储低位字节 - 0xff


#include<cstdio>
int main()
{
int i=0x00ff; //I know 0xff works. Just tried to make it understable
char *cptr=(char *)&i;
if(*(cptr)==-127)
printf("Little-Endian");
else
printf("Big-Endian");

}

因此,当我将 i 的地址存储在 cptr 中时,它应该指向低字节(假设是 Little Endian,因为这是我的系统所拥有的)。

因此,*cptr 包含 1111 1111。这应该归结为 -127。因为,1 位用于符号位。

但是当我打印*cptr的值时我得到-1,为什么会这样?

请解释我哪里错了?

最佳答案

您从哪里得到 1111 1111-127 的想法?显然,您假设“符号位”应该独立于其余位进行解释,即在 +127 的二进制表示中设置符号位应该将其转换为 -127,对吧?好吧,确实存在以这种方式工作的表示法:它称为符号幅度表示法。然而,它在实践中几乎未被使用。大多数现代机器使用 2's Complement 签名类型的表示,这是完全不同的事情。

在 2 的补码机器上 1111 1111 始终是 -1-127 将是 1000 00011000 0000-128,顺便说一句。

最重要的是,请记住 char 类型不一定是有符号的。如果您特别需要一个带符号的类型,则必须拼写出来:signed char

关于c++ - 我似乎不明白这个程序关于将整数指针转换为字符指针的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659285/

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