c - 在 c 中将整数复制到 char * 时出现奇怪的结果

标签 c arrays char integer

我正在尝试将整数值复制到 char *,但对于大于 127 的整数我总是得到奇怪的结果。

int main(int argc, char **argv) {
    printf("Running test\n");

    char x[2];
    int y = 127, z = 128;
    printf("\ny: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (y >> i) & 0x1);
        fflush(stdout);
    }
    printf("\nz: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (z >> i) & 0x1);
        fflush(stdout);
    }
    *x = y;
    printf("\nxy: "); fflush(stdout);
    for (int i = 0; i < 32; i++) {
        printf("%d", (*x >> i) & 0x1);
        fflush(stdout);
    }
    printf("\nxz: "); fflush(stdout);
    *x = z;
    for (int i = 0; i < 32; i++) {
        printf("%d", (*x >> i) & 0x1);
        fflush(stdout);
    }
    return 0;
}

结果:

<小时/>

运行测试

y:11111110000000000000000000000000
z: 00000001000000000000000000000000
xy: 11111110000000000000000000000000
xz: 00000001111111111111111111111111

<小时/>

对于编译,我使用 gcc v 5.4.0(如果重要的话,仅使用输出标志): “gcc test.c -o 测试”

感谢任何帮助

最佳答案

如果您有一个signed char,它通常可以表示 -128 到 +127 范围内的数字。大多数编译器默认使用带符号的 char

因此,即使不进行移位,127 以上的数字也无法正确表示。

此外,右移负符号值也是实现定义的

关于c - 在 c 中将整数复制到 char * 时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417935/

相关文章:

c++ - 为什么只有C++会出现数据类型转换错误,而C不会出现数据类型转换错误?

java - 从 java : Why doesn't the array get printed? 传递的 c 中打印数组

c - libcurl 详细输出到文件,不使用命令行

数组的 C++ 模板并知道它们的大小

c - fread 循环没有读取所有字节,为什么字节颠倒了?

c - 如何在C中访问二维数组值并将值赋给int

Java:设置预定长度的数组作为方法参数?

C++ - 如何将 char append 到 char*?

c++ - 无法从 'unsigned char *' 转换为 'char *'

c++ - uint8_t 和 unsigned char 链接错误