java 简单认识移位运算符和位运算符
移位运算符和位运算符本质上都是操作二进制位,因为计算机存储的是二进制数据,运算效率相对较高。
移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以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 简单认识移位运算符和位运算符的更多相关文章
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
- C++算数运算符和位运算符
C++根据功能和用途将运算符分为算数运算符.位运算符.关系运算符和逻辑运算符等不同类型.四种不同运算符的优先级从大到小依次位算-位-关-逻. 一.算数运算符 1.加减乘除(+ - * /) 加减乘除位 ...
- (一)《Java编程思想》学习——按位运算符、移位运算符
(第三章) (一)按位运算符 按位逻辑运算符有: “与”(AND) & 1&1=1;1&0=0;0&0=0 “或”(OR) | 1|1=1;1|0=1;0 ...
- JAVA算术运算符、关系运算符和位运算符
算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...
- java注释 命名 数据类型 基本类型转换 位运算符 逻辑运算符 三目运算符
一.java注释 1.单行注释 //注释内容 2.多行注释 /*注释内容*/ 3.文档注释(可用javadoc工具生成api文档,不过我还没试过)/**文档注释*/,文档注释可以在使用的时候看见注释 ...
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- js之运算符(位运算符)
一.概念 位运算在数字底层(表示数字的32个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的,但是它很不直观,许多场合不能够使用.大多数语言都提供了按位运算符,恰当的使用按位运算符 ...
- python常用算数运算符、比较运算符、位运算符与逻辑运算符
编辑时间: 2019-09-04,22:58:49 算数运算符 '+'.'-'.'*'.'/' :加.减.乘.除 '**':指数运算, ‘//’:整除, ‘%‘:求余数 num_1 = 15; num ...
随机推荐
- thymeleaf使用基础教程
thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎. thymeleaf介绍 简单说, Thymeleaf 是一个跟 Velocity.FreeM ...
- springboot深入学习(四)-----tomcat配置、websocket
一.更改servlet服务器 springboot中默认可以集成多种servlet容器,当引入如下依赖时: springboot默认以tomcat作为项目的servlet容器,如果用户想要替换tomc ...
- this指针和const成员函数
1.this指针 1)this指针是成员函数的隐式参数,成员函数通过this指针来访问调用它自己的那个对象,成员函数对各成员的访问均通过this进行 2)当某个对象调用它的成员函数时,编译器会把这个对 ...
- c#用EPPLUS操作excel
参考: http://www.cnblogs.com/rumeng/p/3785748.html http://www.cnblogs.com/libla/p/5824296.html#3818995 ...
- 学以致用十四-----打造一个简单的vim IDE
一.安装dircolors git clone https://github.com/seebi/dircolors-solarized.git cd dircolors-solarized/ mv ...
- PHP上传文件参考配置大文件上传
PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...
- linux 修改密码
1.开机 2.按下e键 直接进入编辑页面 3.找到ro 删除ro那一段 输入 rw init=/sysroot/bin/sh 4.进入单用户模式 5.改变程序执行时所参考的根目录位置 chroot / ...
- File类、文件过滤器、递归、文件及文件夹的操作方法
一.File Io概述: 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和 ...
- GetFileOpenName()、GetFilesavename
GetFileOpenName() 功能显示打开文件对话框,让用户选择要打开的文件. 语法:GetFileOpenName(title,pathname,filename{,extension{,fi ...
- 3.insert添加用法
一.新增用户接口 UserMapper.java package tk.mybatis.simple.mapper; import org.apache.ibatis.annotations.Para ...