c 位操作操作不乘以字符

标签 c char bit

我有这个简单的代码,为什么它返回这个随机字符?

#include <stdio.h>

int main()
{
    char c = '1';
     printf("%c\n",c);
    c = c << 2;

    printf("%c\n",c);

    return 0;
}



1

? (some random character)

为什么没有返回 2?

最佳答案

因为'1'1不是同一件事。 '1'是代表数字 1 的字 rune 字,表示字符 '1' 的基础值取决于使用的字符集。

例如,在 ASCII 中,字符 1由十进制值 49(十六进制 0x31)表示。所以假设 ASCII,c = c << 2将值 196(乘以 4)分配给 c 。如果 char有符号且长度为 8 位(通常是这种情况),这会溢出并调用未定义的行为。

如果你想让它打印 12你应该a)乘以2而不是4(即移位1而不是2),b)存储数值而不是其表示形式(但是当然,然后你需要在打印时调整它):

int main()
{
    char c = 1;
    printf("%c\n", c+'0');
    c = c << 1;

    printf("%c\n", c+'0');

    return 0;
}

关于c 位操作操作不乘以字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785460/

相关文章:

c - 为什么我收到段错误 : 11 on the program below

c - 代码是如何执行的和gcc

c - 使用 sin(double) 生成正弦音会意外地填充内存块

c++ - 结构的 char* 成员被 strcmp 覆盖?

c++ - 从字符串中提取单个字符并将其转换为 int

c# - 将一个字节转换为 8 位,并带有 true 或 false 标志

lua - 未找到 'bit' 的 LuaRocks 模块

c - 为什么没有打印任何内容? C语言编程

c# - char 数组返回值如 5 0'w'

java - 从字节数组中获取位值