位运算符有:<< , >> , >>> , & , | , ^ , ~

  下面通过实验来学习这几种运算

  以下的数据类型是 int 用32位表示,二进制右边的0省略

  // 21和-21的二进制表示

  System.out.println( Integer.toBinaryString(21));  // 10101

System.out.println(Integer.toBinaryString(-21)); // 11111111111111111111111111101011

  

  // << 带符号位向右移 移动n位即乘以2的n次方(输出结果为下面注释)

  System.out.println("21 << 4 : " + Integer.toBinaryString(21 << 4) + " to decimate: " + (21 << 4));

   // 21 << 4 : 101010000 to decimate: 336

  System.out.println("-21 << 4 : " + Integer.toBinaryString(-21 << 4) + " to decimate: " + (-21 << 4));

  // -21 << 4 : 11111111111111111111111010110000 to decimate: -336

  // >> 带符号位向左移 高位补符号位 移动n位即除以2的n次方(输出结果为下面注释)

  System.out.println("21 >> 3 : " + Integer.toBinaryString(21 >> 3)+ " to decimate: " + (21 >> 3));

  // 21 >> 3 : 10 to decimate: 2

  System.out.println("-21 >> 3 : " + Integer.toBinaryString(-21 >> 3)+ " to decimate: " +(-21 >> 3));

  // -21 >> 3 : 11111111111111111111111111111101 to decimate: -3

  // >>> 不带符号位左移 高位补0

  System.out.println("21 >>> 3 : " + Integer.toBinaryString(21 >>> 3) + " to decimate: " + (21 >>> 3));

  // 21 >>> 3 : 11111111111111111111111111101011 to decimate: 2

  System.out.println("-21 >>> 3 : " + Integer.toBinaryString(-21 >>> 3)+ " to decimate: " + (-21 >>> 3));

  // -21 >>> 3 : 11111111111111111111111111101 to decimate: 536870909

  System.out.println(Integer.parseInt("11111111111111111111111111101", 2)); // 转为十进制

  // 536870909

  // & 第一个操作数的第n位 与 第二个操作数的第n位 相同为1时为1  其他情况为 0

  System.out.println(4 & 1); // 100 & 1 = 0

  System.out.println(5 & 1); // 101 & 1 = 1

  System.out.println(5 & 3); // 101 & 11 = 1

  // | 第一个操作数的第n位 或 第二个操作数的第n位 其中一个为1就为1

  System.out.println(5 & 2); // 101 & 10 = 111 = 7

  // ^ 第一个操作数的第n位 异或 第二个操作数的第n位 相同为1  不同为0

  System.out.println(5 ^ 3); // 101 ^ 11 = 110 = 6

  

  // ~ 操作数的第n位为1,那么结果的第n位为0,反之。

  System.out.println(~5); // ~00101 = 11010 = -6

  (转~)应用:

  1.  判断int型变量a是奇数还是偶数    
       a&1  = 0 偶数 
       a&1 =  1 奇数 
  2.  求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
        (x&y)+((x^y)>>1); 
  3.  对于一个大于0的整数,判断它是不是2的几次方
      ((x&(x-1))==0)&&(x!=0); 
  4.  比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效
        x ^= y; 
        y ^= x; 
        x ^= y; 
  5. 求绝对值
      int abs( int x ){ 
         int y ; 
         y = x >> 31 ; 
       return (x^y)-y ;        //or: (x+y)^y 
     }
  6.  取模运算,采用位运算实现:
       a % (2^n) 等价于 a & (2^n - 1) 
  7.  乘法运算   采用位运算实现
       a * (2^n) 等价于 a << n
  8.   除法运算转化成位运算
        a / (2^n) 等价于 a>> n 
  9.   求相反数
        (~x+1) 
  10  a % 2 等价于 a & 1

转载于:https://www.cnblogs.com/kirov/p/5051200.html

JAVA语法--位运算相关推荐

  1. Java 实现位运算计算加减乘除

    机器数和机器数的真值 一个数在计算机中的二进制表示形式,叫做这个数的机器数.机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1.举个例子,比如在机器字长为8位的情况下(机器字长是指 ...

  2. 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出

    文章目录 前言 一.位运算符号 二.位运算的运算规则 扩展 前言 传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基 ...

  3. java的位运算的意义

    最近,由于工作原因在编写教材时,对java的位运算进行了深入了解,现记录如下.       首先要明白一个概念,Java位运算是针对于整型数据类型的二进制进行的移位操作.主要包括位与.位或.位非,有符 ...

  4. java int位运算_java中int的表示方法,位运算的解析

    随着时代的不断发展,越来越多的人开始投入到java的学习当中来.今天就来为大家介绍java中int的表示方法以及位运算的内容有哪些一起来看看吧. 首先我们需要知道的是,在java中,int是使用32位 ...

  5. java double 位运算_JAVA位运算等运算符总结

    JAVA位运算等运算符总结 一.概述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算. Java 语言中常用的运算符可分为如下几种:算术运算符 赋值运算符 比较运算符 ...

  6. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  7. [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]

    [问题描述][简单] [解答思路] 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, ...

  8. 【Java】位运算判断2的N次幂

    思考 如何判断一个数是不是2的N次幂? 难道要一直除下去?一直乘过去?还是打表? 我们就不能简单一些处理这个问题吗? 那就有了这篇博客的内容--位运算判断一个数是不是2的N次幂-- 核心算法 其实就是 ...

  9. java用位运算实现加减乘除

    个人主页:熬夜磕代码丶 作品专栏: java se 我变秃了,也变强了 给大家介绍一款程序员必备刷题平台--牛客网 点击注册一起刷题收获大厂offer吧 文章目录 前言 一.常见位运算 1. & ...

最新文章

  1. 机器学习实践:了解数据核心的通用方法!
  2. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
  3. JAVA获取当前系统时间System.currentTimeMillis()
  4. idea tomcat乱码_Tomcat新手常见问题
  5. STM32F4 HAL库开发 -- RTC
  6. 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)
  7. Spring和JSF集成:动态导航
  8. vnpy学习_06回测结果可视化改进
  9. 谭晓生大闹中国计算机中心,360高管谭晓生不满中国计算机大会拖堂和临时加议程,现场摔话筒发飙...
  10. mysql常用基础操作语法(九)~~外连接查询【命令行模式】
  11. 重头戏!ZeroMQ的发布-订阅模式详解:ZMQ_PUB、ZMQ_SUB
  12. python爬取和平精英皮肤_Python——LOL官方商城皮肤信息爬取(一次练手)
  13. html实现手风琴轮播图,javascript经典特效分享 手风琴、轮播图、图片滑动
  14. python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~
  15. 使用powerpoint简单的处理图片(用作浏览器背景)
  16. 关于测速MB/S,Mb/S,KB/s的区别
  17. js实现获取前12个月份的数组
  18. golang切片简介
  19. 农行k宝输入密码黑屏解决方法
  20. 永磁同步电机绝对位置的调零

热门文章

  1. python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
  2. python在excel中的应用-Python利用pandas处理Excel数据的应用详解
  3. python turtle库画图案-python中的turtle库绘制图形
  4. 机器人编程语言python-5大机器人流行编程语言对比,你学会了哪种?
  5. 笨方法学python3-笨办法学python3 pdf下载|
  6. 用python画皮卡丘画法-python turtle绘图库绘制【皮卡丘】源码
  7. python在会计工作中的应用-浅谈各行各业到底该如何应用python?
  8. python科学计算基础教程pdf下载-用Python做科学计算 pdf版
  9. python单词意思-python实现单词本功能
  10. python基础代码-python基础,python基础代码大全