详解Java的位操作符
作者:mrr 发布时间:2023-06-24 05:31:14
Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作。如果基本类型是char、byte或者short类型的数值进行移位处理,那么会转化成int类型,再进行移位的处理
Java的按位操作符
按位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。这个操作符有与(&)、非(~)、或(|)、异或(^)。我们知道单位“比特”(bit),即代进制位,都是0和1,异或(^)可能比较复杂点,两个操作数的位中,相同则结果为0,不同则结果为1。那么最基本的逻辑就像下面这个样子。
1&1 → 1
1&0 → 0
~1 → 0
~0 → 1
1|1 → 1
1|0 → 1
1^0 → 1 (1为01,0为00,那么结果就是01,还是1)
1^1 → 0
Java的移位操作符
Java的移位操作符无非就是对二进制进行位移。
进行<<就是左移,也就是所有所有二进制往左边移动一个位,0010 0000 << 1 等于0100 0000
进行>>右移,也就是所有所有二进制往右边移动一个位,0010 0000 >> 1 等于0001 0000 。
可以试试下面的例子,整数型的也是变成二进制来计算:
class Test{
public static void main(String[] args){
int numInt1 = 3;
int numInt2 = -3;
System.out.println(numInt1<<1);
System.out.println(numInt1>>1);
System.out.println(numInt2<<1);
System.out.println(numInt2>>1);
}
}
/* 输出的结果如下(www.breakyizhan.com)
6 ---> 0000 0011<<1 , 变为0000 0110
1 ---> 0000 0011>>1 , 变为0000 0001...1后面的1被顶出去了,所以结果为1
-6 --> 1111 1101<<1 , 变为1111 1010 取反+1= 0000 0110 -6
-2 --> 1111 1101>>1 , 变为1111 1110 取反+1= 0000 0010 -2
*/
Java的三元操作符if-else
三元操作符也叫做条件操作符,用来做简单的逻辑判断是最好不过的,因为其简洁高效,当然,也可以用if-else代替三元操作符,但是,三元操作符最终也会生成一个值。三元操作符表达式如下:
boolean-exp? exp0: exp1
如果boolean-exp(布尔表达式)的结果为true,就计算exp0这个表达式的值不计算exp1的值,如果为false,就计算后面的表达式exp1这个表达式的值不计算前面exp0的值,然后返回计算结果的值。可以来看一下详细的例子:
public class sanyuantest{
static int changeNo(int 1){
return i < 5 ? i*100:i*10;
}
public static void main(String[] args){
println(changeNo(3));
println(changeNo(6));
}
}
/*输出的结果如下(www.breakyizhan.com)
300
60
*/
上面这段代码也可以用if-else来实现,当然,有部分人认为if-else可以让代码看起来逻辑更加清晰。但是用三元表达式显得代码更加简洁。
总结
以上所述是小编给大家介绍的Java的位操作符网站的支持!
来源:http://www.breakyizhan.com/JavaMind34.html


猜你喜欢
- 相信大家对SaaS架构都有所了解,这里也不过多介绍,让我们直奔主题。技术框架springboot版本为2.3.4.RELEASE持久层采用J
- 目录前言1. 如何让两个线程依次执行?2. 如何让两个线程按照指定的方式有序相交?3. 线程 D 在A、B、C都同步执行完毕后执行4. 三个
- ztree生成树状图ztree官网前台导入js和css包下载地址前端页面 ztree.jsp<%@ page contentType=
- 简介官方API文档Scaffold的of方法说明有说明调用Scaffold.of方法是在Scallfold的子组件的Build方法中,也就是
- java list,set,map,数组间的相互转换详解1.list转setSet set = new HashSet( new Array
- 今天看到一个ios写的图灵机器人,直接去官网(http://www.tuling123.com/openapi/)看了下API接入,太简单了
- 本文以一个实例简单实现了类的创建与初始化,实现代码如下所示:using System;using System.Collections.Ge
- 本文实例讲述了Android编程判断当前应用是否在后台运行的方法。分享给大家供大家参考,具体如下:/** 判断程序是否在后台运行 */pub
- 什么是代理模式代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。代理,顾名思义就是一个真实对象会存在一个代理对象
- 这段时间花了点时间整理了几个新手易犯的典型缺陷(专门针对C#的),但是个人的力量毕竟有限缺陷的覆盖面比较窄,有些缺陷的描述也不够准确,这里先
- 我们经常在项目开放中需要进行很多配置, 那么这些配置基本上都是动态的, 如果我直接写在代码中, 修改起来很麻烦, 如果该配置在多处进行引用啦
- 前言最近遇到个小问题,要为几十个文本框添加相同的失去焦点事件,常规的办法是在VS的事件管理器里面添加,但那样太繁琐了,几十个文本框,要加几十
- 1.获取String osName =System.getProperties().getProperty(&quo
- 环境与版本本文出来之前的一篇文章中的hibernate的相关lib 外Java事务管理之Hibernate还需要加入spring的lib 包
- 前言这几天正在看Android官方的开发文档,里面有很多很值得思考的开发建议,有时间的朋友可以去看一下(官方是英文文档,如果看不懂可以通过浏
- 本文实例为大家分享了C#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100
- JSR303介绍在Java中提供了一系列的校验方式这些校验方式在javax.validation.constraints包中引入依赖<
- 简介Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法
- 使用InsertProvider注解报错解决目前项目在使用mybatis,并且是使用注解的方式。在使用InsertProvider注解的时候
- 指纹识别作为最新兴起的用户身份验证机制,已经被越来越多的应用程序所采用,相比传统的密码九宫格等验证方法,指纹识别更加安全,如今越来越多的安卓