Перевод битов Python в Java - PullRequest
0 голосов
/ 18 октября 2018

Я нашел код Python на GitHub, и мне нужно сделать то же самое в Java, я почти преобразовал его в Java, но я получаю предупреждение, говорящее Shift operation '>>' by overly large constant value

это Pythonкод, который я пытаюсь преобразовать

if i > 32:
  return (int(((j >> 32) & ((1 << i))))) >> i
return (int((((1 << i)) & j))) >> i

, и это код Java, который я сделал, пытаясь преобразовать из кода Python

if (i > 32) {
    return (j >> 32) & (1 << i) >> i;
  }
return ((1 << i) & j) >> i;

предупреждение находится в этой строке (j >> 32)

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это на самом деле не имеет смысла для меня, потому что смещение 32 бита в int ничего не оставляет. Как бы то ни было, если вы хотите внедрить тот же метод с использованием long, вот код, который я написал для этого.

public int bitShift(long j, int i) {
    return i > 32 ? ((int) ((j >> 32) & ((long) (1 << i)))) >> i : ((int) (j & ((long) (1 << i)))) >> i;
}
0 голосов
/ 18 октября 2018

Поскольку значение Java int составляет 32 бита (см. здесь ), смещение его на 32 бита вправо не оставляет ничего от оригинального int и, следовательно, не имеет особого смысла

...