Почему в этом случае x = 44? - PullRequest
0 голосов
/ 25 мая 2020

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

x = 2 * y;

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

Я понимаю, что unsigned char означает символы ASCII от 0 до 255, но я не знаю, почему x печатает наши 44.

Есть ли у кого-нибудь диаграмма ASCII, которой я могу следовать?

1 Ответ

4 голосов
/ 25 мая 2020

Я понимаю, что unsigned char означает символы ASCII от 0 до 255, но я не знаю, почему x печатает наши 44.

Потому что 2 * 150 равно 300, что больше 255 . 300 находится за пределами представимых значений unsined char в вашей системе.

Когда фактический результат операции arithmeti c выходит за пределы представимых значений целевого беззнакового типа, результат будет соответствовать фактическому результат по модулю количества представимых значений. 44 совпадает с 300 по модулю 256.

PS Для целочисленных типов со знаком, если результат операции arithmeti c выходит за пределы представимых значений, поведение программы будет неопределенным. Избегайте любой ценой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...