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 ...
随机推荐
- (4)4 larger-than-life lessons from soap operas
https://www.ted.com/talks/kate_adams_4_larger_than_life_lessons_from_soap_operas/transcript 00:12In ...
- 第9章 符合Python风格的对象
#<流畅的Python>读书笔记 # 第9章 符合Python风格的对象 # 本章包含以下话题: # 支持用于生成对象其他表示形式的内置函数(如repr().bytes(),等等) # 使 ...
- TCP/IP协议(1):各层协议帧格式
一. 1.OSI与TCP/IP对应: TCP/IP各层功能: 链路层:包括操作系统的设备驱动程序和计算机的网卡,提供底层传输服务. 网络层:为数据选择路由,在众多计算机和网络设备组成的网络中选择一 ...
- 修改oracle用户密码为永不过期
错误提示:ORA-28001: the password has expired (DBD ERROR: OCISessionBegin) 解决方法:修改密码为永不过期 (1)查看用户的proifle ...
- zl
https://mooc.study.163.com/course/2001281002?tid=2001392029&_trace_c_p_k2_=a1ef6cb9a64342008c8f5 ...
- oss上传文件夹
最近公司做工程项目,实现文件夹云存储上传. 网上找了很久,发现网上很多项目都存在相似问题,最后终于找到了一个符合我要求的项目. 工程如下: 这里对项目的文件夹云存储上传进行分析,实现文件夹上传,如何进 ...
- Nodejs的测试和测试驱动开发
测试是保证软件质量必不可少的一环.测试有很多形式:手动.自动.单元测试等等.这里我们只聊使用Mocha这个框架在Nodejs中实现单元测试.单元测试是测试等重要组成,这样的测试只对于一个方法,这样的一 ...
- spring之IOC和DI实现
Spring核心思想 : IOC控制反转 DI依赖注入 AOP切面编程 IOC思想: 场景描述: 在没有加入spring框架之前我们调取业务层时需要创建对象,例如: 接口名 变量名=new 接 ...
- Java案例:超市库存管理系统
案例介绍: 模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现,见下图 案例需求分析: 根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作 ...
- web-day1
第1章 WEB01-HTML篇 今日任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 了 ...