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 ...
随机推荐
- 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书
因为之前你的手机可能已经安装了该证书,所以再次下载会说找不到证书 解决办法:如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题),操作步骤如 ...
- .NET性能优化(文摘)
第1章 性能指标 1.1 性能目标 1.2 性能指标 第2章 性能度量 2.1 性能度量方式 白盒测试-小程序 黑盒测试-大型程序 2.2 Windows内置工具 2.2.1 性能计数器 2.2.2 ...
- ELASTIC SEARCH 性能调优
ELASTICSEARCH 性能调优建议 创建索引调优 1.在创建索引的使用使用批量的方式导入到ES. 2.使用多线程的方式导入数据库. 3.增加默认刷新时间. 默认的刷新时间是1秒钟,这样会产生太多 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)
题目链接:https://nanti.jisuanke.com/t/31443 相关前置链接 https://www.cnblogs.com/dolphin0520/p/3708602.html ht ...
- 使用bat批处理文件定时自动备份sqlserver数据库
一.创建一个sql文件,在里面写入以下代码: USE MasterGOdeclare @str varchar(100)set @str='D:\sqlserver14backup\CDB\'+rep ...
- 点击文字弹出一个DIV层窗口代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- SVN安装配置与使用
http://www.cnblogs.com/skyway/archive/2011/08/10/2133399.html http://www.cnblogs.com/lidabo/archive/ ...
- UIActivityIndicatorView 的使用
// // UIActivityIndicator.m // ToolBar // // Created by lanouhn on 15/1/3. // Copyright (c) 2015 ...
- cpu、内存、raid初识
计算机基础 1u = 4.45cm dmidecode -s system-product-name 查看linux系统是物理机还是虚拟机 `逻辑CPU个数: cat /proc/cpuinfo | ...
- PhantomJS快速入门-无界面浏览器
https://blog.csdn.net/libsyc/article/details/78199850 PhantomJS快速入门 本文简要介绍了PhantomJS的相关基础知识点,主要包括Pha ...