2010-03-04 4 views
1

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

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

Если кто-то это знает, ответьте.

+0

http://en.wikipedia.org/wiki/Signed_number_representations – Tim

ответ

2

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

Two's complement является наиболее распространенным представлением.

2

Есть много возможных представлений чисел со знаком, наиболее распространенным является two's complement.

+0

Но..Это не совсем то, что я хотел прочитать ... Как они представлены в памяти компьютера? Как машина (или компилятор) знает, что int подписан или без знака? и т. д. – VaioIsBorn

+1

Машина не знает - вот почему вы должны рассказать компилятору, как ее обрабатывать. В памяти это просто представлено как определенное количество бит, что может быть чем угодно ... –

+0

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

2

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

1

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

0

Существует множество возможных представлений, каждый из которых зависит от вашего computer's organization. Наиболее известные из них

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

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

  • Нет связанных вопросов^_^