Целые числа со знаком и без знака - почему байты обрабатываются по-разному? - PullRequest
1 голос
/ 24 августа 2011

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

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

Однако, если я выберу единицу измерения как байт и введу 10011010, то вдруг он будет обработан как -102 вдесятичный.Всякий раз, когда я увеличиваю его, начиная с байта, он расширяется до знака и всегда будет -102 в десятичном виде.

Если я использую что-либо большее, чем байт, тогда оно остается 154 в десятичном виде.

МожетКто-нибудь, пожалуйста, объясните это кажущееся неравенство?

1 Ответ

0 голосов
/ 24 августа 2011

Когда вы выбираете единицу в качестве байта, MSB со значением 10011010 обрабатывается как бит со знаком, что делает эту однобайтовую целочисленную эквивалентную интерпретацию со значением -102 (дополнение 2).

Для целых чисел, размер которых превышает 8 бит, скажем, 16 битов, число будет равно: 0000000010011010, которое не имеет 1 в MSB, поэтому оно рассматривается как положительное целое число, целочисленное представление которого равно 154 в десятичном виде. Когда вы преобразуете 8-битный байт в более высокий тип, расширение знака сохранит интерпретацию -ve и в хранилище большей длины.

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