Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Невозможное возможно? |
Автор: Salatovec 1.8.2013, 00:20 | ||
Доброго времени суток, дорогие форумчане, помогите в следующем вопросе : Проинициализируйте переменнyю i таким образом, чтобы распечаталось слово.
Ответ запишите в виде 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 | ||
А не боитесь что щас набегут строгие блюстители стандартов, и скажут что это все "не совсем так" ? на меня они почему-то всегда набегают ![]() Стандарт не ограныивается только применение дополнительной кодировки.
кстати, именно поэтому сдвиги отриц.чисел считаются UB |
Автор: bsa 1.8.2013, 13:27 |
volatile, так они набегать должны не на меня и даже не на ТС. А на препода, который этот вопрос задал. Но, скорее всего, тема там была из разряда "машинное представление целых чисел со знаком" или "переполнение целых чисел". В любом случае, вопрос очень каверзный, и, не разобравшись в деталях двоичного представления, дать ответ сложно. |