Почему в Turbo C ++ IDE выходные данные целочисленной переменной с жестко закодированным значением 65536 равны 0, и меньше, чем это значение (65536), является отрицательным целым числом, а больше, чем это значение (65536), является положительным целым числом?
Если мы инициализируем целое число с жестко закодированным значением 65536 и печатаем его, оно будет печатать 0, а если мы изменим значение этой целочисленной переменной с 65536 на 65535 или меньше, как 65534, и так будет печатать -1, -2 ,. … и если мы изменим значение этой целочисленной переменной с 65536 на 65537 или больше, он выведет 1,2,3 … и так далее, почему это происходит?
Я проверил это на Turbo C ++ IDE.
Пожалуйста, объясните логику и работайте за этим ясно, как я новичок.
Древний Turbo C ++ использовал 16-битный int
,
Кажется, вы говорите о 16-битном знаковом значении (от -32768 до 32767), это означает, что он рассматривает самый левый бит как знак.
Если вы добавите в него 65535 (1111 1111 1111 1111) — он будет считаться отрицательным, поскольку самый левый бит равен 1. Другие биты (все единицы) дают наибольшее отрицательное значение, равное «-1». Он будет оставаться отрицательным, пока самый левый бит не станет 0. Это будет 32767.
Если вы поставите 65536 (0001 0000 0000 0000 0000) — он просто обрежет последние 16 бит, что равняется нулю, и это значение будет равно «0».
65538 (0001 0000 0000 0000 0010) — снова обрежет последние 16 бит, и вы получите ‘2’
Примечание. Вообще говоря, вы не должны сохранять значения вне диапазона типов. Если у вас есть 16-разрядное целое число, которое может хранить только (от -32768 до 32767), вы не должны указывать здесь 65535.
Я предполагаю, что вращение чисел происходит, когда мы пересекаем целочисленный предел.
Таким образом, после достижения 65536 положительные числа снова начинаются с больших значений.
Исходный лимит составляет от -32768 до 32767. Если мы перейдем к 32768, мы фактически достигнем -32768. Так что, когда мы достигнем 65536, мы получим 0, и положительные числа начинаются снова и снова.