我有这个简单的代码,为什么它返回这个随机字符?
#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 位(通常是这种情况),这会溢出并调用未定义的行为。
如果你想让它打印 1
和2
你应该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/