Home > Java > javaTutorial > Java's clever method of displacement operation

Java's clever method of displacement operation

高洛峰
Release: 2016-12-16 17:05:55
Original
1606 people have browsed it

Left shift operation: If x is of type byte, short, or char, then x is promoted to int;

2) If x is of type byte, short, char, or int, then n is reassigned (the process is: take the lower 5 of n's complement bits are then converted into decimal int values, which is equivalent to taking n modulo 32: n=n%32);

If x is long type, n is reassigned (the process is: take the lower 6 bits of n's complement and then Converting to a decimal int value is equivalent to taking n modulo 64: n=n%64);

(Because the int type is 4 bytes, that is, 32 bits, moving 32 bits will make no sense. For long, it is modulo 64)

3) Shift x to the left by n digits, and the entire expression produces a new value (the value of x remains unchanged);

<< is the left shift symbol, and the column x

// 左移: 向左移动,右边补0   
for (int i = 0;i < 8 ;i++)   
System.out.print( (1 << i) + " ");
Copy after login

output

80000000 c0000000 e0000000 f0000000 f8000000 fc000000 fe000000 ff000000

The above general rule is correct, but there is a limitation. For int type, the number of shifted digits does not exceed 32, and for long type, the number of shifted digits does not exceed 64. . Now perform the following test:

Java code

// 右移: 向右移动,如果符号位(int型为32位)为0,左边补0,符号位为1,左边补1   
// 符号位为1的右移   
for (int i = 0;i < 8 ;i++)   
System.out.print( Integer.toHexString(0x40000000 >> i) + " ");
Copy after login

0x80000000. After shifting 31 bits to the right, each bit becomes 1 (that is, -1). According to this idea, shifting 32 bits to the right is still -1, but right After shifting 32 bits, the result is the number itself.

By testing the left and right shift of int and long type data, we found that:

Java handles the shift operation "a <<||>> b", first perform b mod 32||64 operation, If a is of type int, take mod 32. If a is of type double, take mod 64, and then use the general shift operation rules mentioned above to shift.

At this point, you can understand why there is this statement

 // 符号位为1的右移   
// 最高4位为1000, 右移1位,变成1100也就是c,   
for (int i = 0;i < 8 ;i++)   
System.out.print( Integer.toHexString(0x80000000 >> i) + " ");
Copy after login

in the BitSet class, because Programmers who are familiar with jdk know that writing 1L << (bitIndex % 64) is redundant for jdk.

For more articles related to Java’s clever methods of displacement operation, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template