Бит знака

В информатике бит знака — это бит, используемый в представлении чисел со знаком, который указывает на знак числа. Хотя только знаковые числовые типы данных содержат бит знака, он практически всегда располагается на позиции старшего разряда (MSB, most significant bit)[1], поэтому в некоторых контекстах термин «бит знака» может использоваться как синоним «старшего разряда».

Почти всегда, если бит знака равен 0, число неотрицательно (положительно или равно нулю)[1]. Если бит знака равен 1, число отрицательно. В форматах, отличных от дополнительного кода, возможно существование нуля со знаком: отдельные представления «положительного нуля» и «отрицательного нуля», причём последний не соответствует математическому понятию отрицательного числа.

При использовании представления в виде кода с дополнением, для преобразования числа со знаком в более широкий формат дополнительные биты должны быть заполнены копиями бита знака, чтобы сохранить числовое значение[2], этот процесс называется расширение знака или пропагация знака[3].

Вес бита знака в дополнительном коде

Биты Значение в дополнительном коде
0000 0
0001 1
0111 7
1000 −8
1001 −7
1111 −1

Дополнительный код — наиболее распространённый формат для представления целых чисел со знаком. В дополнительном коде бит знака имеет вес , где — позиция разряда в числе[1]. Для 8-битного целого числа бит знака будет иметь значение , то есть −128. Поскольку это значение по модулю больше суммы всех остальных разрядов, установка этого бита делает число отрицательным, тем самым меняя знак.

Вес бита знака в обратном коде

Биты Значение в обратном коде
0000 0
0001 1
0111 7
1000 −7
1001 −6
1111 −0

Обратный код похож на дополнительный код, но бит знака имеет вес , где — позиция разряда в числе. Для 8-битного целого числа бит знака будет иметь значение , то есть −127. Это позволяет представлять два типа нуля: положительный и отрицательный, что невозможно в дополнительном коде.

Бит знака в прямом коде

Биты Значение в прямом коде
0000 0
0001 1
0111 7
1000 −0
1001 −1
1111 −7

В представлении с прямым кодом бит знака напрямую определяет знак числа. Если бит знака равен 0, число положительно; если бит знака равен 1, число отрицательно[2]. Как и в обратном коде, это позволяет существовать как положительному, так и отрицательному нулю.

Бит знака в числах с плавающей запятой

Числа с плавающей запятой, такие как формат IEEE, формат IBM, формат VAX, а также форматы, использовавшиеся в Z1 и Z3 Конрада Цузе, используют представление прямого кода.

Примечания

  1. 1 2 3 Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4. Intel. Дата обращения: 13 марта 2024.
  2. 1 2 Bryant, Randal E. Chapter 2: Representing and Manipulating Information // Computer Systems: a Programmer's Perspective / Randal E. Bryant, David R. O'Hallaron. — Upper Saddle River, New Jersey : Prentice Hall, 2003. — ISBN 0-13-034074-X.
  3. Data Dictionary (Glossary and Algorithms). Adroit Data Recovery Centre Pte Ltd. Дата обращения: 15 декабря 2014. Архивировано 19 апреля 2017 года.