0xFF7F와 그 아래에있는 두 줄에서 무슨 일이 일어나고 있는지 이해하는 데 문제가 있습니다. 어느 정도 그것을 설명하는 링크가 있습니다. 0xFF7F >> posBit) & oldByte가) & 0x00FF 는 3 개 값 '이 읽을 수 가정하는 방법을 함께 AND 연산 또는 있어야하는 경우 http://www.herongyang.com/java/Bit-String-Set-Bit-to-Byte-Array.html 나도 몰라. 누구나 여기서 어떤 일이 일어나고 있는지 좀 더 분명하게 알 수 있다면, 나는 그것을 크게 고맙게 생각할 것입니다.비트 시프트 및 16 진법 코드를 사용하는 setBit Java 메소드 - 질문
private static void setBit(byte[] data,
final int pos,
final int val) {
int posByte = pos/8;
int posBit = pos%8;
byte oldByte = data[posByte];
oldByte = (byte) (((0xFF7F>>posBit) & oldByte) & 0x00FF);
byte newByte = (byte) ((val<<(8-(posBit+1))) | oldByte);
data[posByte] = newByte;
}
은 selectBits 메서드에서 매개 변수로이 메서드에 전달되었습니다. setBit (out, i, val); out = 바이트 [] out = 새 바이트 [numOfBytes]; (numOfBytes는이 상황에서 7 일 수 있습니다.) i =는 숫자 [57]이고, 56 정수를 유지하는 PC1 int 배열의 원래 숫자입니다. val =는 getBit() 메소드의 바이트 배열에서 가져온 비트입니다.
비록 진수 숫자의 의미는 무엇입니까? 이 경우 0xFF7F와 0x00FF가 선택된 이유는 무엇입니까? –
그들은 _masks_이며, 일부 비트를 선택하기 위해 AND 연산자와 함께 사용됩니다. 첫 번째 경우 0xFF7F는 지정된 비트를 설정하여 작업하려는 코드를 제외하고 1을 모두 가질 수 있기 때문에 사용됩니다 (__pos__에 따라 이동됩니다). 0x00FF는 바이트 쌍의 가장 낮은 바이트를 선택하는 데 사용되지만, 이는 하위 8 비트 만 선택하기 때문에 사용됩니다. – Jack