gpt4 book ai didi

c - ((char) 257) 在 C 中打印 1?

转载 作者:行者123 更新时间:2023-11-30 20:16:19 27 4
gpt4 key购买 nike

我很困惑。我很头疼。我是 C 语言新手。

#include<stdio.h>

int main()
{
int i = 257;
int *iPtr = &i;

printf("val 1: %d \t val 2: %d \n\n",*( (char*)iPtr ), *( (char*)iPtr+1) );

int iptr_alias = iPtr;
int and_val = iptr_alias & 255;

printf("Value of iPtr (aka address of i): %d \n\n", iPtr);
printf("Value at location pointed to by iPtr using %%c: %c \n\n",*iPtr); //gives weird character


int f = 257;
int *fptr = &f;


printf("char starred fptr: %d \t charred 257: %d \n\n",*((char*)fptr), ((char)257) );
// i know the above is obvious.
system("PAUSE");
}

我的问题:

<强>1。显然 *( (char*) iPtr ) = 257 & 255 = 1 (按位与运算)。(char)*iPtr 也相同 。但如果我使用 %c 修饰符,它不会打印 1 。为什么?

<强>2。为什么 *( (char*) iPtr+1 ) = 1 ??

我对这一切感到非常困惑(我自己写这些是为了消除困惑,但它却有效......)

((char)257) 使用 %d 或 %o 或 %x 给出 1%c 给出了一些奇怪的 ASCII 字符

我的意思是,当我执行 printf("%c ", 257) 时,我不会得到 1 ,而是得到一个奇怪的 ASCII 字符。为什么?

在实际问题中,我应该确定将打印为 val 1val 2 的内容。

我可能会忽略任何愚蠢简单的事情,但我真的对这种困惑感到困惑和厌倦。请帮忙。

最佳答案

请记住,char 只有 8 位,因此可以表示 0 到 255 之间的数字。当您打印 257 时,它会翻转并变为 1 ( 256 为零)。

至于为什么257(即1)会变成一个奇怪的字符,我引导你到一个ASCII table .

编辑:关于有符号无符号

在本例中,您的 char 类型为 unsigned。如果它是签名,那么翻转将发生在127(但由于签名/未签名的工作方式,它将翻转到-128并且 129 将转为 -127)。

关于c - ((char) 257) 在 C 中打印 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587593/

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