23是啥意思啊
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/30 07:09:39
23是啥意思啊
23是啥意思啊
23是啥意思啊
引用一下think in java里的原文吧!自己看:
移位运算符
移位运算符面向的运算对象也是二进制的“位”.可单独用它们处理整数类型(主类型的一种).左移位运算符()则将运算符左边的运算对象向右移动运算符右侧指定的位数.“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1.Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0.这一运算符是C或C++没有的.
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int.只有右侧的5个低位才会用到.这样可防止我们在一个int数里移动不切实际的位数.若对一个long值进行处理,最后得到的结果也是long.此时只会用到右侧的6个低位,防止移动超过long值里现成的位数.但在进行“无符号”右移位时,也可能遇到一个问题.若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出).它们会自动转换成int类型,并进行右移位.但“零扩展”不会发生,所以在那些情况下会得到-1的结果.可用下面这个例子检测自己的实现方案:
//:URShift.java
// Test of unsigned right shift
public class URShift {
public static void main(String[] args) {
int i = -1;
i >>>= 10;
System.out.println(i);
long l = -1;
l >>>= 10;
System.out.println(l);
short s = -1;
s >>>= 10;
System.out.println(s);
byte b = -1;
b >>>= 10;
System.out.println(b);
}
} ///:
移位可与等号(=或>>>=)组合使用.此时,运算符左边的值会移动由右边的值指定的位数,再将得到的结果赋回左边的值.
下面这个例子向大家阐示了如何应用涉及“按位”操作的所有运算符,以及它们的效果:
//:BitManipulation.java
// Using the bitwise operators
import java.util.*;
public class BitManipulation {
public static void main(String[] args) {
Random rand = new Random();
int i = rand.nextInt();
int j = rand.nextInt();
pBinInt("-1",-1);
pBinInt("+1",+1);
int maxpos = 2147483647;
pBinInt("maxpos",maxpos);
int maxneg = -2147483648;
pBinInt("maxneg",maxneg);
pBinInt("i",i);
pBinInt("~i",i);
pBinInt("-i",-i);
pBinInt("j",j);
pBinInt("i & j",i & j);
pBinInt("i | j",i | j);
pBinInt("i ^ j",i ^ j);
pBinInt("i > 5",i >> 5);
pBinInt("(~i) >> 5",i) >> 5);
pBinInt("i >>> 5",i >>> 5);
pBinInt("(~i) >>> 5",i) >>> 5);
long l = rand.nextLong();
long m = rand.nextLong();
pBinLong("-1L",-1L);
pBinLong("+1L",+1L);
long ll = 9223372036854775807L;
pBinLong("maxpos",ll);
long lln = -9223372036854775808L;
pBinLong("maxneg",lln);
pBinLong("l",l);
pBinLong("~l",l);
pBinLong("-l",-l);
pBinLong("m",m);
pBinLong("l & m",l & m);
pBinLong("l | m",l | m);
pBinLong("l ^ m",l ^ m);
pBinLong("l > 5",l >> 5);
pBinLong("(~l) >> 5",l) >> 5);
pBinLong("l >>> 5",l >>> 5);
pBinLong("(~l) >>> 5",l) >>> 5);
}
static void pBinInt(String s,int i) {
System.out.println(
s + ",int:" + i + ",binary:");
System.out.print(" ");
for(int j = 31; j >=0; j--)
if(((1 =0; i--)
if(((1L 5,int:1846303,binary:
00000000000111000010110000011111
i) >> 5,int:-1846304,binary:
11111111111000111101001111100000
i >>> 5,int:1846303,binary:
00000000000111000010110000011111
i) >>> 5,int:132371424,binary:
00000111111000111101001111100000
数字的二进制形式表现为“有符号2的补值”.