2015-03-05 3 views
0

У меня есть int, и я хотел бы получить 19 наиболее значимых бит в java. Я пробовал всевозможные методы, никто из них не работает. Может кто-нибудь, пожалуйста, помогите мне?Как получить большинство значительных n бит из int в java

+2

не могли бы вы уточнить свой вопрос. – Kick

+0

Я хочу вычислить часть тега адреса для реализации прямого кэширования кэша в java. Поэтому мне нужно сравнить тег-часть строки кэша с тегом-частью адреса. адрес указан как int. Я хочу получить 19 наиболее значимых бит этого адреса (19 - количество бит в теге). – user3143696

+0

как вы хотите представить эти биты? как двоичная строка? Как насчет знакового бита? – Jason

ответ

4

С битным междунаром 32, вы хотите сохранить 19 наиболее значимыми, так отбрасывать 13 минимум; то сдвиг вправо на 13 бит, но должны избавиться от возможного расширения знака, через операцию с 19 битов:

(myint >> 13) & 0x7ffff 
+0

Итак, нет поддержки беззнакового сдвига? Или вы просто не знакомы с оператором? – Kayaman

+0

Действительно, неподписанный сдвиг также является хорошим решением: myint >>> 13. – Bram

0

Целое число составляет 4 байта, то есть 4 * 8 = 32 бит. Так что если вы хотите получить 19 бит, вы можете попробовать что-то вроде:

if (myint & 0X00002000 >> 19 == 1) { 
    //do something 
} 
+0

и получить все 19 бит наиболее значимых бит? – user3143696

+0

удалите правую смену, и у вас есть все 19 наиболее значимых бит – SMA

1

Добавление ответа Брэма, вам не нужно даже в AND если вы используете беззнаковый сдвиг.

myInt >>> 13; предоставит вам 19MSB (хотя они теперь расположены в младших разрядах).

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