2008-11-03 12 views
1

Я подписал номера (дополнение 2s), хранящиеся в 32-битных целых числах, и я хочу извлечь из них 16-битные поля. Верно ли, что, если я извлечу низкие 16 бит из 32-разрядного числа со знаком, результат будет правильным, если исходный (32-разрядный) номер вписывается в 16 бит?Извлечение битового поля из числа со знаком

Для положительных чисел это тривиально верно, и кажется, что и для негативов. Но можно ли это доказать?

Заранее спасибо

ответ

3

Да, в дополнительном знак биты расширения «весь путь» слева. Когда вы добавляете подписанный короткий к подписанному int, число равно "sign extended" и имеет то же значение.

Пример: Nibble(-2) = 1110 => Byte(-2) = 1111_1110

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

0

Из моего (второго) чтения вашего вопроса, похоже, вам не нужно «извлекать» какие-либо биты, а скорее преобразовывать целое число?

I.e. сделать что-то вроде этого:

int negative = -4711; 
short x = (short) negative; 

В этом случае компилятор будет убедиться, что в максимально возможной степени точности исходного числа в конвертируется в задании. Это было бы так, даже если основное оборудование не использовало дополнение 2: s. Если это так, то это скорее всего будет усечением, как объяснил Мотти.

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

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