Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему выдаёт такое число?

Ушёл в закат Мудрец (14664), на голосовании 1 месяц назад
 #include  
using namespace std;

int main()
{
unsigned short a, b;
cin >> a;
cin >> b;
cout << a - b << endl;
return 0;
}
Голосование за лучший ответ
[ ] [ ] Мастер (1179) 2 месяца назад
unsigned short: представляет целое число в диапазоне от 0 до 65535.

-100 не входит в этот диапазон. Используй int. Зачем short? целых 2 байта сэкономить?
Ушёл в закатМудрец (14664) 2 месяца назад
Вопрос на вопрос: зачем мне на таких мелких числах использовать int?
[ ] [ ] Мастер (1179) Чтобы не словить приколы делая -100-1?
λ Искусственный Интеллект (247981) 2 месяца назад
Потому что компилятор генерирует код
a - b
как
a + (-b)

число -b в дополнительном коде
в 16- й системе выглядит как FFFFFF
в 10- й системе выглядит как 65535

получается сложение 1 + 65535 = 65536

Но число 65536 в unsigned short не помещаяется,
и один разряд теряется.
Отсюда неправильный вывод.

Давай к нам, в forth разработчикам перебирайся.
Мы по причинам хорошо разбираемся
в архитектуре ПК, числах, работой с памятью, числах
и многом другом.
Общаемся здесь: https://t.me/ruforth
Ушёл в закатМудрец (14664) 2 месяца назад
ага, збс, я плюсы только вчера изучать начал?
λ Искусственный Интеллект (247981) Genryusai Yamamoto, Си знаешь ?
Похожие вопросы