移位运算符和位运算符本质上都是操作二进制位,因为计算机存储的是二进制数据,运算效率相对较高。

移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2

/*
移位运算符
把整数的二进制位进行左移或右移
按位左移 << , 右侧补0,
按位右移 >>, 左侧补符号位(最高位)
无符号按位右移>>>, 左侧补0
*/
class Demo07 {
public static void main(String[] args) {
int xx = 20;
System.out.println( xx << 1 ); //
/* x在内存中的二进制形式为:
0000 0000 0000 0000 0000 0000 0001 0100
xx<<1 左移一位
0 0000 0000 0000 0000 0000 0000 0010 1000
*/ System.out.println( xx >> 1 ); //
/* x在内存中的二进制形式为:
0000 0000 0000 0000 0000 0000 0001 0100
xx>>1 右移一位, 左侧补0
0000 0000 0000 0000 0000 0000 0000 1010 0
*/ xx = -20;
System.out.println( xx << 1 ); //-40
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1110 1100
xx<<1 左移一位
1 1111 1111 1111 1111 1111 1111 1101 1000
*/
System.out.println( xx >> 1 ); //-10
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1110 1100
xx>>1 右移一位, 左侧补1
1111 1111 1111 1111 1111 1111 1111 0110
*/ //左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2 xx = -11;
System.out.println( xx << 1 ); //-22
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1111 0101
xx<<1 左移一位
1 1111 1111 1111 1111 1111 1111 1110 1010
*/ xx = -13;
System.out.println( xx << 1 ); //-26
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1111 0011
xx<<1 左移一位, 右侧补0
1 1111 1111 1111 1111 1111 1111 1110 0110
*/ xx = -11;
System.out.println( xx >> 1 ); //-6
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1111 0101
xx>>1 右移一位, 左侧补1
1111 1111 1111 1111 1111 1111 1111 1010 1
*/ xx = -13;
System.out.println( xx >> 1 ); //-7
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1111 0011
xx>>1 右移一位, 左侧补1
1111 1111 1111 1111 1111 1111 1111 1001 1
*/ xx = -11;
System.out.println( xx >>> 1 ); //
/* x在内存中的二进制形式为:
1111 1111 1111 1111 1111 1111 1111 0101
xx>>>1 无符号移一位
0111 1111 1111 1111 1111 1111 1111 1010 1
*/ //一个整数乘以/除以2的幂次方时,通过移位运算效率最高
}
}

位运算符:

  按位与 & 按位或 |  按位异或 ^

/*
位运算符
按位与&, 按位或|, 按位异或^, 按位取反 &操作符左右两侧如果是布尔值, &就是逻辑与;
左右两侧为整数,就是按位与
*/
class Demo08 {
public static void main(String[] args) {
int x = 10;
int y = 20;
/*按位与
x在计算机中存储的01序列为:
0000 0000 0000 0000 0000 0000 0000 1010
y的二进制形式为:
0000 0000 0000 0000 0000 0000 0001 0100
按位与&
----------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000
*/
System.out.println( x&y ); //0 /*按位或
x在计算机中存储的01序列为:
0000 0000 0000 0000 0000 0000 0000 1010
y的二进制形式为:
0000 0000 0000 0000 0000 0000 0001 0100
按位或|
----------------------------------------------
0000 0000 0000 0000 0000 0000 0001 1110
*/
System.out.println( x|y ); //30 /*按位异或
x在计算机中存储的01序列为:
0000 0000 0000 0000 0000 0000 0000 1010
y的二进制形式为:
0000 0000 0000 0000 0000 0000 0001 0100
按位异或^
----------------------------------------------
0000 0000 0000 0000 0000 0000 0001 1110
*/
System.out.println( x^y ); //30 /*按位取反
x在计算机中存储的01序列为:
0000 0000 0000 0000 0000 0000 0000 1010
按位取反
----------------------------------------------
1111 1111 1111 1111 1111 1111 1111 0101
*/
System.out.println( ~x ); //-11 // 如何实现两个数的原地交换, 不借助于第三个变量,实现两个变量的交换
x = 10;
y = 20;
//正常情况下,交换两个变量的值
int t = x;
x = y;
y = t; //方法1:
x = 10;
y = 20;
x = x + y; //x==30
y = x - y; //y==10
x = x - y; //x==20 //方法2:
x = 10;
y = 20;
x = x ^ y; //x==30
y = x ^ y; //y==10
x = x ^ y; //x==20 }
}

  

      

java 简单认识移位运算符和位运算符的更多相关文章

  1. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)

    swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...

  2. C++算数运算符和位运算符

    C++根据功能和用途将运算符分为算数运算符.位运算符.关系运算符和逻辑运算符等不同类型.四种不同运算符的优先级从大到小依次位算-位-关-逻. 一.算数运算符 1.加减乘除(+ - * /) 加减乘除位 ...

  3. (一)《Java编程思想》学习——按位运算符、移位运算符

    (第三章) (一)按位运算符 按位逻辑运算符有: “与”(AND)        & 1&1=1;1&0=0;0&0=0 “或”(OR) | 1|1=1;1|0=1;0 ...

  4. JAVA算术运算符、关系运算符和位运算符

    算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...

  5. java注释 命名 数据类型 基本类型转换 位运算符 逻辑运算符 三目运算符

    一.java注释 1.单行注释  //注释内容 2.多行注释 /*注释内容*/ 3.文档注释(可用javadoc工具生成api文档,不过我还没试过)/**文档注释*/,文档注释可以在使用的时候看见注释 ...

  6. java的布尔运算符和位运算符

    1.布尔运算符 &&  逻辑与: ||   逻辑或: !=  不等于: 三元操作符:?: :表达式为  condition?expression1:expression2(当条件为真时 ...

  7. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  8. js之运算符(位运算符)

    一.概念 位运算在数字底层(表示数字的32个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的,但是它很不直观,许多场合不能够使用.大多数语言都提供了按位运算符,恰当的使用按位运算符 ...

  9. python常用算数运算符、比较运算符、位运算符与逻辑运算符

    编辑时间: 2019-09-04,22:58:49 算数运算符 '+'.'-'.'*'.'/' :加.减.乘.除 '**':指数运算, ‘//’:整除, ‘%‘:求余数 num_1 = 15; num ...

随机推荐

  1. spring boot中注入jpa时报could not autowire.No beans of 'PersonRepository' type found

    解决方法,在repository加一个注解.如下图所示: @Component

  2. 2019.01.21 NOIP训练 可持久化序列【模板】(可持久化treap)

    传送门 题意简述:支持在把某个数插入到某版本的第k个位置,删除某版本第k个数,询问第k个数. 思路:用可持久化treaptreaptreap维护区间第kkk个位置的数是啥就可以了. 代码

  3. vue 开发系列(六) 企业微信整合

    概述 手机端程序可以和企业微信进行整合,我们也可以使用企业微信JSSDK功能,实现一些原生的功能. 整合步骤 在整合之前需要阅读 整合步骤. http://work.weixin.qq.com/api ...

  4. vue 开发系列(五) 调用原生API

    概要 我们在开发手机端程序的时候了,我们经常需要使用到拍照,二维码的功能.数字天堂公司提供了大量的原生API支持. http://www.html5plus.org/doc/ 实现 1.在hbuild ...

  5. (5)How to let go of being a "good" person — and become a better person

    https://www.ted.com/talks/dolly_chugh_how_to_let_go_of_being_a_good_person_and_become_a_better_perso ...

  6. IDEA有用插件总结

    IDEA要查看哪些插件起效了可以通过.IntellijIdeaXxx/config/plugins/availables.xml里查看: 一:Lombok插件,里面很多注解都可以省略许多冗余的代码: ...

  7. 微信小程序之画布

    canvas 标签默认宽度300px.高度225px 同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作 ...

  8. ArcGIS 点云转DEM

  9. ArrayBlockingQueue和LinkedBlockingQueue

    1.BlockingQueue接口定义了一种阻塞的FIFO queue ArrayBlockingQueue和LinkedBlockingQueue的区别: 1. 队列中锁的实现不同 ArrayBlo ...

  10. HTML 基础 块级元素与行内元素

    块元素:单独占一行,宽度占整行,可以包含内联元素和其他块元素,通过样式display:inline,变为行内元素,不换行 内联元素:不单独占一行,宽度根据内容来决定,只能容纳文本或者其他内联元素 ,可 ...