> b" 처리는 먼저 b mod 32||64 연산을 수행합니다. a가 int 유형이면 mod 32를 사용하고, a가 double 유형이면 mod 64를 취하고 Shift는 다음과 같습니다. 위에서 언급한 일반적인 시프트 산술 규칙을 사용하여 수행됩니다."/> > b" 처리는 먼저 b mod 32||64 연산을 수행합니다. a가 int 유형이면 mod 32를 사용하고, a가 double 유형이면 mod 64를 취하고 Shift는 다음과 같습니다. 위에서 언급한 일반적인 시프트 산술 규칙을 사용하여 수행됩니다.">
왼쪽 시프트 연산: 컴파일러 실행 단계:
1) x가 byte, short, char 유형인 경우 x를 int로 승격합니다.
2) x가 byte 유형인 경우, short, char, int , n이 재할당됩니다(프로세스는 n의 보수의 하위 5비트를 가져와 이를 10진수 int 값으로 변환합니다. 이는 n 모듈로 32를 취하는 것과 같습니다: n=n%32).
x가 long 유형인 경우 n이 다시 할당됩니다(프로세스는 n 보수의 하위 6비트를 가져와 이를 10진수 int 값으로 변환합니다. 이는 n 모듈로 64를 취하는 것과 동일합니다. n=n %64);
( int 유형이 4바이트, 즉 32비트이므로 32비트를 이동하는 것은 의미가 없습니다. 오랫동안 모듈로 64)
3) Shift x를 n자리만큼 왼쪽으로 이동하면 전체 표현식이 새 값을 생성합니다(x 값은 변경되지 않음).
26ff06e72a50d762ddacec1496bc1f7d> x>>1은 부호 비트가 없는 오른쪽 시프트 기호입니다.
>> >1은 변경 내용을 의미)보충 지침:Java 코드출력
1 2 4 8 16 32 64 128
// 左移: 向左移动,右边补0 for (int i = 0;i < 8 ;i++) System.out.print( (1 << i) + " ");
출력
40000000 20000000 10000000 8000000 4000000 2000000 1000000 800000
// 右移: 向右移动,如果符号位(int型为32位)为0,左边补0,符号位为1,左边补1 // 符号位为1的右移 for (int i = 0;i < 8 ;i++) System.out.print( Integer.toHexString(0x40000000 >> i) + " ");
출력
800000 00 c0000000 e0000000 f0000000 f8000000 fc000000 fe000000 ff000000
// 符号位为1的右移 // 最高4位为1000, 右移1位,变成1100也就是c, for (int i = 0;i < 8 ;i++) System.out.print( Integer.toHexString(0x80000000 >> i) + " ");위의 일반 규칙은 틀린 것은 아니지만, int형의 경우 쉬프트 자릿수는 32자를 넘지 않고, long형의 경우 쉬프트 자릿수는 64자를 넘지 못한다. 이제 다음 테스트를 수행합니다. Java 코드
0x80000000. 31비트를 오른쪽으로 이동한 후 각 비트는 1(즉, -1)이 됩니다. 오른쪽으로 이동 물론 32비트는 여전히 -1이지만 32비트를 오른쪽으로 이동한 후에 결과는 숫자 자체입니다.
int 및 long 유형 데이터의 왼쪽 및 오른쪽 시프트를 테스트하여 다음을 발견했습니다.
System.out.println(Integer.toHexString(0x80000000 >> 31)); // output: ffffffff System.out.println(Integer.toHexString(0x80000000 >> 32)); // output: 80000000Java는 시프트 연산 "a d97d3819c7ea187b03d9b2a6e554e3c4> b"를 먼저 처리합니다. b mod 32||64 연산, a가 int 유형인 경우 mod 32를 취하고, a가 double 유형인 경우 mod 64를 선택한 다음 위에서 언급한 일반적인 시프트 연산 규칙을 사용하여 시프트합니다. 이 시점에서 BitSet 클래스에
문이 있는 이유를 이해할 수 있습니다. jdk에 익숙한 프로그래머는 1L << % 64) jdk에는 중복됩니다.
1L << bitIndex
Java의 영리한 치환 연산 방법에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!