Я смотрел это видео о максимальных и минимальных значениях целых чисел со знаком.
Возьмите пример положительного значения со знаком - 0000 0001 Первый бит означает, что число положительное, а последние 7 бит - это само число. Так что это легко интерпретируется как +1.
Теперь возьмем пример отрицательного значения со знаком - 1000 0000, которое равно -8. Хорошо, компьютер может понять, что это отрицательное значение из-за первого бита, но как, черт возьми, он понимает, что 000 0000 означает -8?
В общем, как отрицательные значения со знаком хранятся / интерпретируются на компьютере?
c
memory
bitwise-operators
bit
discussedtree
источник
источник
Ответы:
Стандарт C не предусматривает какой-либо конкретный способ представления отрицательных чисел со знаком.
В большинстве реализаций, с которыми вы можете столкнуться, целые числа со знаком минус хранятся в том, что называется дополнением к двум . Другой основной способ хранения отрицательных чисел со знаком называется дополнением .
Дополнение к двоичному числу N
x
определяется как2^N - x
. Например, дополнение к 8-битной кодировке1
-2^8 - 1
или1111 1111
. Два дополнения 8-битного8
есть2^8 - 8
, что в двоичном виде1111 1000
. Это также можно рассчитать, перевернув битыx
и добавив единицу. Например:Дополнение к N-битному числу x определяется как x со всеми его битами, в основном.
Дополнение двух имеет несколько преимуществ перед дополнением. Например, у него нет понятия «отрицательный ноль», что по понятным причинам сбивает с толку многих людей. Сложение, умножение и вычитание работают так же с целыми числами со знаком, реализованными с двумя дополненными, как и с целыми числами без знака.
источник
Существует три хорошо известных метода представления отрицательных значений в двоичном виде:
Подписанная величина . Это проще всего понять, потому что он работает так же, как мы привыкли иметь дело с отрицательными десятичными значениями: первая позиция (бит) представляет знак (0 для положительного, 1 для отрицательного), а другие биты представляют число , Хотя нам легко это понять, с компьютерами трудно работать, особенно при выполнении арифметических операций с отрицательными числами.
В 8-битной величине со знаком значение 8 представляется как 0 0001000, а -8 как 1 0001000.
Свое дополнение . В этом представлении отрицательные числа создаются из соответствующего положительного числа путем переключения всех битов, а не только знака бита. Это облегчает работу с отрицательными числами для компьютера, но усложняет существование двух различных представлений для +0 и -0. Отражение всех битов делает это труднее понять людям.
В дополнение к 8-битному значению 8 представлено как 00001000, а -8 как 11110111.
Два дополнения . Это наиболее распространенное представление, используемое в настоящее время для отрицательных целых чисел, потому что с ним проще всего работать для компьютеров, но также труднее для понимания людьми. При сравнении битовых комбинаций, используемых для отрицательных значений между одним дополнением и дополнением двух, можно заметить, что один и тот же битовый шаблон в дополнении двух кодирует следующий младший номер. Например, 11111111 означает -0 в дополнении к одному и -1 в дополнении к двум, а также 10000000 (-127 против -128).
В дополнении 8-битового два значение 8 представлено как 00001000, а -8 как 11111000.
источник
Подписанные целые числа хранятся с использованием http://en.wikipedia.org/wiki/Two%27s%20complement
Тогда вы получите:
По сути, это очень легко считать, вы считаете до половины от целого числа со знаком. Сделайте +1, сделайте его отрицательным и начните обратный отсчет.
источник