网站首页 > java教程 正文
运算符分类:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运运算符
- 三目运算符
位运算运算符
注意:要做位运算,首先要把数据转换为二进制
(使用的是补码)
位运算符:
&(有0则0) , | (有1则1) ,
^(相同则0,不同则1) , ~(0变1,1变0) ,
<<(左移) , >>(右移) , >>>(无符号)
位运算例子
class YunSuan{
public static void main(String[] args){
int a = 3;
int b = 4;
System.out.println(3 & 4);//输出结果0
System.out.println(3 | 4);//输出结果7
System.out.println(3 ^ 4);//输出结果7
System.out.println( ~3);//输出结果-4
/* 分析:
3的二进制
00000000 00000000 00000000 00000011
4的二进制
00000000 00000000 00000000 00000100
&位运算:有0则0.
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-------------------------------------
00000000 00000000 00000000 00000000
结果是:0
|位运算:有1则1
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
-------------------------------------
00000000 00000000 00000000 00000111
结果是:7
^位运算符:相同则0,不同则1
00000000 00000000 00000000 00000011
^00000000 00000000 00000000 00000100
-------------------------------------
00000000 00000000 00000000 00000111
结果是:7
~位运算:0变1,1变0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100
补码:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
结果是:-4
*/
}
}
^位的特点:一个数据对另一个数据异或(^)两次,该数据本身不变
例子:
class YunSuan{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println( a ^ b ^ b );// 10
System.out.println( a ^ b ^ a );// 20
}
}
<<:左移 左边最高位丢弃,右边补齐0
>>:右移 最高位是0,左边补1 最高为位是1左边补1
>>>无符号:无论最高位是0还是1,左边补齐0
例子:
class YunSuan{
public static void main(String[] args){
//<<把<<左边的数据*2的移动次幂
System.out.println( 3 << 2 );//输出结果:3*2^2=12
//>> 同理把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2);//输出结果:24/2^2=6
System.out.prinyln(-24 >> 2);//输出结果:-24/2^2=-6
System.out.println(-24 >>> 2);//输出结果:1073741818
/*
( 3 << 2 )意思:计算出三的二进制,再向左移动两位丢弃,右边补0,<<的移动 计算出3的二进制
00000000 00000000 00000000 00000011
(00)00000000 00000000 00000000 00001100
>>的移动 计算-24的二进制:
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00)
补码:1111111111 11111111 11111111 111010(00)
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
>>>的移动 计算-24的二进制:
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
补码:0011111111 11111111 11111111 111010(00)
反码:0011111111 11111111 11111111 111010(00)
原码:0011111111 11111111 11111111 111010(00)
结果:1073741818
*/
}
}
例题:
- 请自己实现两个数的变量交换 。
- 请用最有效率的方式计算出2乘以8的结果?
例题一解决方法:
class yunsuan{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println("a:"+a)
System.out.println("b:"+b)
方法一:使用第三变量
int c = a;
a = b;
b = c;
System.out.println("a:"+a)
System.out.println("b:"+b)
//输出结果:a:20 b:10
方法二:用位异或运算
a=a^b;
b=a^b;//a^b等于a^b^b=a
a=a^b;//a^b等于a^b^a=b
方法三:
a=a+b;//a=30
b=a-b;//b=10
a=a-b;//a=20
方法四:一句话搞定
b=(a+b) - (a=b);//b=30-20=10 a=20
System
}
}
例题二解决方法:
class YunSuan{
public static void main(String[] args){
System.out.println(2*8);
System.out.println(2 << 3);
}
}
- 上一篇: Java运算符之逻辑运算符和举例说明
- 下一篇: 效率突击队-海象运算符(海象人之斧)
猜你喜欢
- 2024-09-27 「编程基础」零基础学习Java之运算符
- 2024-09-27 C语言中的“隐形”语法:三目运算符极致解析
- 2024-09-27 Java运算符之算术运算符和举例说明
- 2024-09-27 java运算符顺序(java中运算符的优先顺序)
- 2024-09-27 【学习笔记】分支结构的第三大板块:三目运算符
- 2024-09-27 【java】运算符基础 【java】运算符基础 #运算符
- 2024-09-27 java基本语法之运算符(java语言中的运算符有哪些)
- 2024-09-27 Spring SpEL三元运算符(sql三元运算符)
- 2024-09-27 Java中的运算符(java中的运算符是用来表示某种运算的符号)
- 2024-09-27 Java运算符和表达式(java运算符和表达式答案)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)