Как округлить наиболее значимые биты? - PullRequest
1 голос
/ 23 декабря 2011

Итак, на Java у меня есть:

long value = 1324623451867855123L 

Мне нужны 36 младших значащих битов, МОЖНО значимые биты могут быть выброшены. В моей голове я мог бы использовать побитовое и просто сделать

long rightMost36Bits = value & 0xFFFFFFFFFL

И это дало бы мне младшие 36 бит. Но ... не такой трудоемкий ... Чего мне не хватает?

** Редактировать **

Исправлена ​​опечатка, предназначенная & для и.

Edit2

Действительно хотел младшие 10 десятичных цифр. Поэтому я должен просто использовать% 10000000000. Извините за излишнее решение :) Результат из этого уравнения 12444252435 .... это не то, что я хочу. Я хочу больше как 451867855132

Ответы [ 3 ]

5 голосов
/ 23 декабря 2011

Это должно быть значение & 0xFFFFFFFFFL. Вы использовали ^, который является XOR.

2 голосов
/ 23 декабря 2011

^ - побитовое значение XOR.Вы хотите

  value & 0xFFFFFFFFFL;

для побитового И потерять биты более высокого порядка.XOR оставит биты старших разрядов в одиночку при инвертировании 36 битов младших разрядов.И установит биты старшего разряда на ноль и сохранит биты младшего разряда.

0 голосов
/ 15 августа 2013

В Java целочисленный литерал по умолчанию будет иметь тип int, поэтому вы должны добавить суффикс L, чтобы сообщить, что число длинное

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