为什么在这种情况下x = 44?

问题描述 投票:0回答:2

unsigned char x = 0;
unsigned char y = 150;

x = 2 * y;

cout << "x: " << (int)x << endl; // returns 44

我知道无符号字符表示从0到255的ASCII字符,但我不知道为什么x会打印我们的44。

有人有我可以追踪的ASCII图表吗?

c++ char unsigned
2个回答
0
投票

我知道无符号字符表示从0到255的ASCII字符,但我不知道为什么x会打印我们的44。

因为2 * 150是300,它大于255。300在系统上非伪字符的可表示值之外。


0
投票

缓冲区溢出。无符号字符值在0-255之间因此,如果您将其分配给150 * 2即300,那么您将得到44

© www.soinside.com 2019 - 2024. All rights reserved.