我发现了一些奇怪的事情:
当我有一个三个元素的char* s,并将其赋值为“21”时,
s的打印short int值似乎为12594,即二进制的0010001 0010010,分别为49和50个字符。但根据ASCII表,“2”的值为50,“1”的值为49。
当我将char向右移动时,
*(short*)s >>= 8
,结果与(1.)一致,即为‘1’或49。但是,在我将char*s = '1'
赋值后,s的打印字符串也显示为“1”,这让我之前认为它会变成“11”感到困惑。
我对char中存储的位数感到困惑,希望有人能解释一下。
以下是我使用的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("%lu,%lu\n",sizeof(char), sizeof(short));
char* s = malloc(sizeof(char)*3);
*s = '2', *(s+1) = '1', *(s+2) = '\0';
printf("%s\n",s);
printf("%d\n",*(short int*)s);
*(short*)s >>= 8;
printf("%s\n",s);
printf("%d\n",*(short int*)s);
*s = '1';
printf("%s\n",s);
return 0;
}
输出结果为:
1,2
21
12594
1
49
1
这个程序是在macOS上使用gcc编译的。