부호없는 32 비트 정수를 Java로 분할하여 두 개의 개별 16 비트 숫자로 나눌 수 있습니다.이 두 숫자를 나중에 함께 추가하여 원래 숫자를 얻을 수 있습니다.분할 부호없는 32 정수를 다시 작성할 수있는 두 개의 16 비트 숫자로
1
A
답변
3
교대를 비롯한 비트 단위 연산을 사용할 수 있습니다.
먼저 분해는 : 여기
int original32 = 1000;
int high16 = original32 >>> 16;
int low16 = original32 & 0xFFFF;
System.out.println(high16);
System.out.println(low16);
, 하위 16 비트는, 우리가 제로 아웃 상위 16 비트 값을 얻기 위해 마스크. 상위 16 비트를 얻으려면 오른쪽으로 이동하십시오. 낮은 비트 (실제로, OR)
int rebuilt32 = (high16 << 16) | (low16 & 0xFFFF);
System.out.println(rebuilt32);
여기서 우리는 다시 좌측 상위 16 비트 시프트하고 '추가'
는 재구성.
1
비트 쉬프트 및 캐스트를 사용하여 짧게 만들 수 있습니다.
int i = 1000100010;
short lower = (short) i;
short upper = (short) (i >> 16);
int complete = lower | (upper << 16);
'short'는 서명되어 있으므로 15 번째 비트가 1이면 부호가 확장됩니다. –
@PeterLawrey :하지만이 코드에는'short'가 없으므로'low16'에 대해'& 0xFFFF'를 두 번 할 필요가 없습니다. 대신 [이 답변] (https://stackoverflow.com/a/44098811/2711488)을 수정해야합니다 ... – Holger