Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Невозможное возможно?


Автор: Salatovec 1.8.2013, 00:20
Доброго времени суток, дорогие форумчане, помогите в следующем вопросе :

Проинициализируйте переменнyю i таким образом, чтобы распечаталось слово.

Код

int i = ???;

int j = - i;

if ( i >= 0 ) exit(0);

if ( j >= 0 ) exit(0);

std::cout<<"hello";


Ответ запишите в виде 0x12345678.

Такое что - действительно возможно? Как? 

Заранее благодарю!

Автор: Arantir 1.8.2013, 00:33
-2147483648

Автор: Salatovec 1.8.2013, 00:35
Arantir, Спасибо огромное - а можешь объяснить почему так происходит?

Автор: Arantir 1.8.2013, 01:00
Лимиты int — это от -2147483648 до 2147483647. 
Суть в том, что операции компьютер делает с битами. При результате размером больше 32 бит (в случае с int), все лишнее просто отбрасывается.
Так вот дело в том, что умножение -1 на -2147483648 дает первые 32 бита такие же, какие используются для обозначения -2147483648. Разница уже в 33-м бите (положительное 2147483648 — это "1" и 32 нолика), но бит этот отбрасывается.

Так что получается, что -(-2147483648) == -2147483648 при операциях с типом int.

Автор: bsa 1.8.2013, 11:33
Другими словами ответ 0x80000000 (для 32-х и 64-х битных систем) или 0x8000 (для систем меньшей разрядности).
Обращение знака для целых типов выполняется по формуле: -x = ~x + 1 => -0x80000000 = 0x7fffffff + 1 = 0x80000000

Автор: Salatovec 1.8.2013, 12:49
bsa, Спасибо =)

Автор: volatile 1.8.2013, 12:59
А не боитесь что щас набегут строгие блюстители стандартов, и скажут что это все "не совсем так" ?
на меня они почему-то всегда набегают  smile 

Стандарт не ограныивается только применение дополнительной кодировки.
Цитата

9.9.1.
7. ... this International Standard permits 2’s complement, 1’s complement and signed magnitude representations for integral types.

кстати, именно поэтому сдвиги отриц.чисел считаются UB

Автор: bsa 1.8.2013, 13:27
volatile, так они набегать должны не на меня и даже не на ТС. А на препода, который этот вопрос задал. Но, скорее всего, тема там была из разряда "машинное представление целых чисел со знаком" или "переполнение целых чисел". В любом случае, вопрос очень каверзный, и, не разобравшись в деталях двоичного представления, дать ответ сложно.

Автор: EgoBrain 2.8.2013, 03:26
Цитата(bsa @  1.8.2013,  13:27 Найти цитируемый пост)
volatile, так они набегать ... А на препода, который этот вопрос задал ... вопрос очень каверзный, и, не разобравшись в деталях двоичного представления, дать ответ сложно. 

Дык для того каверзные задания даютс, чтобы ученик раскапывая истину еще попутно множество тем изучил (самообразование), в учебном заведении дается лишь 20% информации.


Цитата(volatile @  1.8.2013,  12:59 Найти цитируемый пост)
на меня они почему-то всегда набегают  smile 

И это хорошо, в такие моменты начинается самое интересное  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)