java中有些位运算符
>> 右位移
<< 左位移
>>> 无符号位移
下面给出一个位移运算的例子:
package test;
public class Test {
public static void main(String[] args) {
int i = 1;
i=i<<3;//<<是左位移运算
System.out.println("i=1;i<<3="+i);
// 运算为以下方式进行
// 0000 0000 0000 0000 0000 0000 0000 0001
// 0000 0000 0000 0000 0000 0000 0000 1000
i=1;
i=i>>1;//>>是右位移运算
System.out.println("i=1;i>>1="+i);
// 运算为以下方式进行
// 0000 0000 0000 0000 0000 0000 0000 0001
// 0000 0000 0000 0000 0000 0000 0000 0000 被移出去了
i=2;
i=i>>1;//>>是右位移运算
System.out.println("i=2;i>>1="+i);
// 运算为以下方式进行
// 0000 0000 0000 0000 0000 0000 0000 0010
// 0000 0000 0000 0000 0000 0000 0000 0001
i=-1;
i=i<<1;
System.out.println("i=-1;i<<1="+i);
// 运算为以下方式进行
// 负数的表现形式要注意一下,这里和正数正好相反,以0表示有
// 1111 1111 1111 1111 1111 1111 1111 1111 //-1比较特别
// 1111 1111 1111 1111 1111 1111 1111 1110
}
}
运算结果为:
i=1;i<<3=8
i=1;i>>1=0
i=2;i>>1=1
i=-1;i<<1=-2
这里有个比较有意思的问题
就是-0的表现由于-0无意义所以这里-1
就为:
// 1111 1111 1111 1111 1111 1111 1111 1111
明白了这个问题,那么下面这段代码就比较容易明白了
int i = -1; i>>=12;//这里无论移多少位,都是-1
package test;
public class Test {
public static void main(String[] args) {
int i = -1;
i>>>=31;//无符号位移,左边将会补零
System.out.println(i);
//运算方式如下
//1111 1111 1111 1111 1111 1111 1111 1111
//0000 0000 0000 0000 0000 0000 0000 0001
}
}
>>>是无符号的位移,所以左边将会补零
最终的运算结果为1
_______________________________________________________________________________
~按位非
package test;
public class Test {
public static void main(String[] args) {
int i = -1;
i= ~i;//按位非,取反
System.out.println(i);
//运算方式如下
//1111 1111 1111 1111 1111 1111 1111 1111
//0000 0000 0000 0000 0000 0000 0000 0000
i = -4;
i= ~i;//按位非,取反
System.out.println(i);
//运算方式如下
//1111 1111 1111 1111 1111 1111 1111 1100
//0000 0000 0000 0000 0000 0000 0000 0011
}
}
结果为:3
| 按位或
package test;
public class Test {
public static void main(String[] args) {
int i = 2, j = 1;
int k = i|j;// 按位或
System.out.println(k);
// 运算方式如下
// 0000 0000 0000 0000 0000 0000 0000 0010
// 0000 0000 0000 0000 0000 0000 0000 0001
// 0000 0000 0000 0000 0000 0000 0000 0011
}
}
结果为3
& 按位与
package test;
public class Test {
public static void main(String[] args) {
int i = 2, j = 3;
int k = i&j;// 按位与
System.out.println(k);
// 运算方式如下
// 0000 0000 0000 0000 0000 0000 0000 0010
// 0000 0000 0000 0000 0000 0000 0000 0011
// 0000 0000 0000 0000 0000 0000 0000 0010
}
}
结果为2
^ 按位异或
package test;
public class Test {
public static void main(String[] args) {
int i = 7, j = 5;
int k = i^j;// 按位异或
System.out.println(k);
// 运算方式如下
// 0000 0000 0000 0000 0000 0000 0000 0111
// 0000 0000 0000 0000 0000 0000 0000 0101
// 0000 0000 0000 0000 0000 0000 0000 0010
}
}
结果为:2
分享到:
相关推荐
Java的位运算
JAVA位运算.pdf ,深入了解java位运算
学习java编程,位运算的课件不好找。赶快下啊,系统的有根据的,美!!
java位运算大全.doc
Java位运算操作 左位移 右位移 与或非的操作
总结了一些关于,Java中常用位运行,希望能够帮助大家!
java位运算
Java 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .docJava 中的位运算 .doc
java位运算例子,一看就懂,包含符号介绍,每个符号都有相应的例子。
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1 (3) 将int型变量a的第k位清0,即a=a&~(1 ) (4) 将int型变量a的第k位置1, 即a=a ¦(1 ) (5) int型变量循环左移k次,即a=a ¦a>>16-k (设sizeof(int)...
java位运算.docxjava位运算.docxjava位运算.docxjava位运算.docx
介绍Java中进行位运算的基础知识,并且使用雪花算法为例进一步介绍
java基础知识点----位运算方面的一些小知识
经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!
可进行十六进制字符串按位异或运算,就是输入十六进制数,每个十六进制数间输入空格,然后点输出即可得到结果
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...
解析expression四则运算表达式 如:(1+2*3.5*(2+3)-10+18*20)
因为Java 使用2的补码来存储负数,并且因为Java 中的所有整数都是有符号的,这样应用位运算符可以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,请记住不管高位的...
很好的程序,供大家参考。大家多提意见哈。我们共同学习
java中的位运算.doc