2016-05-21 2 views
4

В книге я читал это говорит, что:Подписано представление типа в C++

Стандарт не определяет, как представлены подписанные типы, но указать, что диапазон должен быть равномерно распределен между положительными и отрицательными значениями. Следовательно, 8-разрядный подписанный символ гарантированно сможет хранить значения от -127 до 127; большинство современных машин используют представление, которые позволяют значение от -128 до 127.

Я полагаю, что [-128; 127] диапазон возникает от метода, называемого «двойки-дополнением», в котором отрицательное число A + 1 (например! 0111 равно 7, а затем 1001 -7). Но я не могу окутать голову, почему в некоторых старых (?) Машинах значения варьируются [-127; 127]. Может ли кто-нибудь прояснить это?

+0

[Ones 'дополнение] (https://en.wikipedia.org/wiki/Ones'_complement), очевидно. С -0 и +0. –

+0

@MrLister спасибо. –

+0

И не забудьте немного более интуитивно понятное представление [sign-magn] (https://en.wikipedia.org/wiki/Signed_number_representations#Signed_magnitude_representation), где один из битов используется только для знака. Я не уверен, что какое-либо оборудование на самом деле было использовано _used_. –

ответ

2

Оба дополнения и знаковые величины представляют собой представления, которые предоставляют диапазон [-127,127] с 8-битным числом. Оба имеют другое представление для +0 и -0. Оба были использованы (в основном) ранними компьютерными системами.

Подписанное представление величины, возможно, является самым простым для людей, чтобы представить его и, вероятно, использовалось по той же причине, что и люди, впервые создавшие десятичные компьютеры, а не двоичные.

Я бы предположил, что единственная причина, по которой его дополнялось, заключалась в том, что разработчики ранних компьютеров еще не рассматривали дополнение двух. Затем позже, из-за обратной совместимости. Хотя, это только моя гипотеза, так что возьми ее с солью.

Дополнительная информация: https://en.wikipedia.org/wiki/Signed_number_representations

В нескольких связанном Factoid: В представлении с плавающей запятой IEEE, подписанный показатель использует excess-K представление и дробная часть представлена ​​подписанной величиной.

+0

О, мальчик, ты напомнил мне о плохих старых днях БХД. –

+0

Не поддерживает ли система IBM Z и P BCD по сей день? –

1

Это на самом деле не -127 до 127. Но -127 до -0 и от 0 до 127.

Ранее процессоры используются два метода:

  1. Подпись величина: В этом аа отрицательный ответ форма положив 1 на самый старший бит. Таким образом, 10000000 и 00000000 оба представляют 0

  2. Дополнение: просто применяйте не к положительному числу. Это приводит к двум нулевым представлениям: 11111111 и 00000000.

Также два дополнения почти так же стара, как и другие два. https://www.linuxvoice.com/edsac-dennis-wheeler-and-the-cambridge-connection/

Смежные вопросы