逻辑运算符与计算机中的移位 -2009-2
来源:互联网 发布:linux运维工资高吗 编辑:程序博客网 时间:2024/06/05 21:21
&与&&的区别
1.相同点
public class Test2{
public static void main(String[] args){
int i=3;
if((i++>5)&&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
}
}
1、&与&&都是逻辑运算符,当两侧表达式都为真的时候才执行{}中的语句,/
2、但是&符号如果前面为假,仍然会执行i++<9的语句
&&则不会执行 所以本例子i为4 若换成&则为5
3、&还是逻辑与运算符
移位
<<:左移 左边最高位丢弃,右边补齐0
原理 0110 1*2^2+1*2^1=6
左移1位
01100 1*2^3+1*2^2=12=2*(1*2^2+1*2^1)=1*2^1*原值
结论 正数左移移X位即原值*2^x
正数右移X位即原值/2^x
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0
面试题:
请用最有效率的方式写出计算2乘以8的结果?
2 * 8
2 << 3
*/
class OperatorDemo3 {
public static void main(String[] args) {
//<< 把<<左边的数据乘以2的移动次幂
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
//>> 把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
/*
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果:-6
>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
1.相同点
public class Test2{
public static void main(String[] args){
int i=3;
if((i++>5)&&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
}
}
1、&与&&都是逻辑运算符,当两侧表达式都为真的时候才执行{}中的语句,/
2、但是&符号如果前面为假,仍然会执行i++<9的语句
&&则不会执行 所以本例子i为4 若换成&则为5
3、&还是逻辑与运算符
移位
<<:左移 左边最高位丢弃,右边补齐0
原理 0110 1*2^2+1*2^1=6
左移1位
01100 1*2^3+1*2^2=12=2*(1*2^2+1*2^1)=1*2^1*原值
结论 正数左移移X位即原值*2^x
正数右移X位即原值/2^x
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0
面试题:
请用最有效率的方式写出计算2乘以8的结果?
2 * 8
2 << 3
*/
class OperatorDemo3 {
public static void main(String[] args) {
//<< 把<<左边的数据乘以2的移动次幂
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
//>> 把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
/*
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果:-6
>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
0 0
- 逻辑运算符与计算机中的移位 -2009-2
- C语言中的逻辑运算符:按位与,按位或,按位异或,取反,左右移位
- 移位运算符 以及 位逻辑运算符
- Java 移位操作>>,<<,>>> 位逻辑运算符 &, |,~,^
- JS中的逻辑运算符与逻辑或
- 第一章、1、逻辑运算符(与、或、移位)实现位运算
- 每天一看---c中的位级运算、逻辑运算、移位运算
- 80X86学习笔记--逻辑运算与移位指令
- 8086逻辑运算和移位
- 8086逻辑运算和移位
- 8086逻辑运算和移位
- lua中的逻辑运算符
- Java中的逻辑运算符
- Matlab中的逻辑运算符
- 逻辑运算符中的 && 和 ||
- 程序中的逻辑运算符:&&
- js中的逻辑运算符
- java中的关系与逻辑运算
- 数的拆分 递归做法(xdoj 1096)
- Javascript面向对象之继承
- Ambiguous handler methods mapped for HTTP path
- 史上最全的CSS hack方式一览
- 详解Hibernate中的一级缓存
- 逻辑运算符与计算机中的移位 -2009-2
- SpringMVC Controller中的service为null
- Java 8之Stream适用场景
- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----
- 设计模式之策略模式
- A星算法,找寻最短路径
- 【JavaScript】BOM总结
- HDOJ 1285 确定比赛名次(拓扑排序)
- OC的Runtime(运行时)机制的解析