Как представляется unsigned int / long

Я читал учебник по сборке, в котором объяснялись целые числа со знаком и целые числа без знака, а также разница между их представлением в памяти компьютера.

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

Если кто-то знает, ответьте пожалуйста.


person VaioIsBorn    schedule 04.03.2010    source источник
comment
en.wikipedia.org/wiki/Signed_number_presentations   -  person Tim    schedule 04.03.2010


Ответы (5)


На странице Википедии Представление числа со знаком показаны наиболее распространенные реализации в памяти целочисленных значений со знаком и без знака.

Дополнение до двух является наиболее распространенным представлением.

person Reed Copsey    schedule 04.03.2010

Существует много возможных представлений чисел со знаком, наиболее распространенным является дополнение до двух.

person Alexander Gessler    schedule 04.03.2010
comment
Но .. Это не совсем то, что я хотел прочитать ... Как они представлены в памяти компьютера? Как машина (или компилятор) узнает, что int подписан или без знака? и т.п. - person VaioIsBorn; 04.03.2010
comment
Машина не знает - вот почему вы должны указать компилятору, как с ней обращаться. В памяти это просто определенное количество бит, которое может быть любым ... - person Reed Copsey; 04.03.2010
comment
Это связано, потому что дополнение до двух достаточно сложно, чтобы позволить многим операциям одинаково работать с неподписанными и подписанными данными, например сложение. - person Alexander Gessler; 04.03.2010

MSB не определяет, подписан номер или нет; в числах со знаком он указывает, является ли число отрицательным. В беззнаковых числах это просто MSB. Программа определяет, считается ли число подписанным или беззнаковым.

person Ignacio Vazquez-Abrams    schedule 04.03.2010

он он. вопрос на засыпку. целые числа со знаком и без знака представляются точно так же. глядя на память, вы никогда не сможете их различить. он исходит из одного из принципов фон Неймана. Так в чем же разница? Разница в том, как они интерпретируются. Если переменная подписана, компилятор использует команды для подписанных целых чисел. Также, если мы знаем, что это число подписано, первый бит сообщает нам, что это знак. преобразование выполняется как ~i + 1 (синтаксис c) обоими способами

person Andrey    schedule 04.03.2010

Существует множество возможных представлений, каждое из которых зависит от организации компьютера. Самые известные из них

В обоих представлениях вы можете проверить первый (наиболее значимый) бит, чтобы узнать, положительное ли число (обычно выключено) или отрицательно (бит включен). То есть, если вы относитесь к номеру как к подписанному. Если вы укажете компилятору обрабатывать такие числа как беззнаковые, бит знака будет использоваться как данные (что удваивает максимум диапазон для типа данных).

person Bruno Brant    schedule 04.03.2010