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 ...
随机推荐
- android 应用商店
下面更多 http://wiki.youmi.net/Wiki/PromotionChannelIDs 小米 http://market.xiaomi.com/dev安智市场 http://dev.a ...
- lambda表达式(c++11)
1.概念 1)lambda表达式是一个可调用的代码单元,它由一个捕获列表.一个参数列表.一个箭头.一个返回类型.一个函数体组成: 2)可以忽略参数列表和返回类型,但必须包含捕获列表和函数体: 3)忽略 ...
- VS2012智能感知变英文解决办法
解决办法: 1.从一台没装.NET3.5的机子上复制C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\zh-CN路径下的文件覆盖就可以 2.或者重装中文版的f ...
- oracle学习笔记一:用户管理(1)简单的命令
1,打开操作界面 我们在安装好oracle后可以在两个地方打开要操作的界面.请看图一: 或者在运行窗口输入sqlplus.其实这里也是调用了bin下面的sqlplus.exe. 在打开dos命令行窗口 ...
- Gym-101102-K-Topological Sort
K. Topological Sort 题面 Consider a directed graph G of N nodes and all edges (u→v) such that u < v ...
- 20155205 信息安全技术第二次实验 Windows口令破解
20155205 信息安全技术第二次实验 Windows口令破解 实验原理 一.口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理员的了解,猜测其可能使用某些信息 ...
- GDAL读写矢量文件——Python
在Python中使用OGR时,先要导入OGR库,如果需要对中文的支持,还需要导入GDAL库,具体代码如下.Python创建的shp结果如图1所示. 图1 Python创建矢量结果 #-*- codin ...
- 开发.Net Script 模板-MyGeneration (翻译)
原文信息 原文地址 原文作者信息 Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com/ October ...
- AIX 批量更改密码
使用 chpasswd 可以使用 chpasswd 方便地更改单个或多个账户密码.这意味着不需要像平时一样在命令行上重复输入密码.尽管可以以交互方式使用 chpasswd,但是我建议以非交互方式使用它 ...
- java通过poi编写excel文件
public String writeExcel(List<MedicalWhiteList> MedicalWhiteList) { if(MedicalWhiteList == nul ...