详解Java的位操作符

 更新时间:2017年09月04日 09:10:48   投稿:mrr  
位操作就是对这些数据进行基本的操作。如果基本类型是char、byte或者short类型的数值进行移位处理,那么会转化成int类型,再进行移位的处理

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的位操作符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 深入理解Java中的接口

    深入理解Java中的接口

    下面小编就为大家带来一篇深入理解Java中的接口。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • SpringBoot注解篇之@Resource与@Autowired的使用区别

    SpringBoot注解篇之@Resource与@Autowired的使用区别

    @Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,那么你知道他们有什么区别吗,本文就来介绍一下
    2023-12-12
  • 快速掌握Java8中的Optional

    快速掌握Java8中的Optional

    Optional 是一个容器类,代表一个值存在或不存在,Optional并不是用来替换所有的null,而是为了在设计良好的API中更明确地表达可能缺失的值,这篇文章主要介绍了Java8的Optional及使用,需要的朋友可以参考下
    2023-07-07
  • Java基础之多线程的三种实现方式

    Java基础之多线程的三种实现方式

    这篇文章主要介绍了Java基础之多线程的三种实现方式,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 使用SpringBoot AOP 记录操作日志、异常日志的过程

    使用SpringBoot AOP 记录操作日志、异常日志的过程

    这篇文章主要介绍了使用SpringBoot AOP 记录操作日志、异常日志的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Jenkins Maven pom jar打包未拉取最新包解决办法

    Jenkins Maven pom jar打包未拉取最新包解决办法

    包版本号未变更新后,jenkins打包不会拉取最新包,本文主要介绍了Jenkins Maven pom jar打包未拉取最新包解决办法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 基于SpringBoot和Vue实现分片上传系统

    基于SpringBoot和Vue实现分片上传系统

    最近想做一个关于文件上传的个人小网盘,一开始尝试使用了OSS的方案,但是该方案对于大文件来说并不友好,所以开始尝试分片上传方案的探索,接下来小编给大家详细的介绍一下如何基于SpringBoot和Vue实现分片上传系统,需要的朋友可以参考下
    2023-12-12
  • Spring Bean后处理器详细介绍

    Spring Bean后处理器详细介绍

    Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理。可以在​Spring容器通过插入一个或多个BeanPostProcessor的实现来完成实例化,配置和初始化一个​bean​之后实现一些自定义逻辑回调方法
    2023-01-01
  • Spring 使用 feign时设置header信息的操作

    Spring 使用 feign时设置header信息的操作

    这篇文章主要介绍了Spring 使用 feign时设置header信息的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java利用ElasticSearch实现增删改功能

    Java利用ElasticSearch实现增删改功能

    这篇文章主要为大家详细介绍了Java如何利用ElasticSearch实现增删改功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08

最新评论