JAVA语法--位运算
位运算符有:<< , >> , >>> , & , | , ^ , ~
下面通过实验来学习这几种运算
以下的数据类型是 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语法--位运算相关推荐
- Java 实现位运算计算加减乘除
机器数和机器数的真值 一个数在计算机中的二进制表示形式,叫做这个数的机器数.机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1.举个例子,比如在机器字长为8位的情况下(机器字长是指 ...
- 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出
文章目录 前言 一.位运算符号 二.位运算的运算规则 扩展 前言 传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基 ...
- java的位运算的意义
最近,由于工作原因在编写教材时,对java的位运算进行了深入了解,现记录如下. 首先要明白一个概念,Java位运算是针对于整型数据类型的二进制进行的移位操作.主要包括位与.位或.位非,有符 ...
- java int位运算_java中int的表示方法,位运算的解析
随着时代的不断发展,越来越多的人开始投入到java的学习当中来.今天就来为大家介绍java中int的表示方法以及位运算的内容有哪些一起来看看吧. 首先我们需要知道的是,在java中,int是使用32位 ...
- java double 位运算_JAVA位运算等运算符总结
JAVA位运算等运算符总结 一.概述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算. Java 语言中常用的运算符可分为如下几种:算术运算符 赋值运算符 比较运算符 ...
- [Leetcode][第78题][JAVA][子集][位运算][回溯]
[问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...
- [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]
[问题描述][简单] [解答思路] 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, ...
- 【Java】位运算判断2的N次幂
思考 如何判断一个数是不是2的N次幂? 难道要一直除下去?一直乘过去?还是打表? 我们就不能简单一些处理这个问题吗? 那就有了这篇博客的内容--位运算判断一个数是不是2的N次幂-- 核心算法 其实就是 ...
- java用位运算实现加减乘除
个人主页:熬夜磕代码丶 作品专栏: java se 我变秃了,也变强了 给大家介绍一款程序员必备刷题平台--牛客网 点击注册一起刷题收获大厂offer吧 文章目录 前言 一.常见位运算 1. & ...
最新文章
- 机器学习实践:了解数据核心的通用方法!
- 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
- JAVA获取当前系统时间System.currentTimeMillis()
- idea tomcat乱码_Tomcat新手常见问题
- STM32F4 HAL库开发 -- RTC
- 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题(如何解决编码 0 延时)
- Spring和JSF集成:动态导航
- vnpy学习_06回测结果可视化改进
- 谭晓生大闹中国计算机中心,360高管谭晓生不满中国计算机大会拖堂和临时加议程,现场摔话筒发飙...
- mysql常用基础操作语法(九)~~外连接查询【命令行模式】
- 重头戏!ZeroMQ的发布-订阅模式详解:ZMQ_PUB、ZMQ_SUB
- python爬取和平精英皮肤_Python——LOL官方商城皮肤信息爬取(一次练手)
- html实现手风琴轮播图,javascript经典特效分享 手风琴、轮播图、图片滑动
- python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~
- 使用powerpoint简单的处理图片(用作浏览器背景)
- 关于测速MB/S,Mb/S,KB/s的区别
- js实现获取前12个月份的数组
- golang切片简介
- 农行k宝输入密码黑屏解决方法
- 永磁同步电机绝对位置的调零
热门文章
- python解释器的安装步骤-Python本地及虚拟解释器配置过程解析
- python在excel中的应用-Python利用pandas处理Excel数据的应用详解
- python turtle库画图案-python中的turtle库绘制图形
- 机器人编程语言python-5大机器人流行编程语言对比,你学会了哪种?
- 笨方法学python3-笨办法学python3 pdf下载|
- 用python画皮卡丘画法-python turtle绘图库绘制【皮卡丘】源码
- python在会计工作中的应用-浅谈各行各业到底该如何应用python?
- python科学计算基础教程pdf下载-用Python做科学计算 pdf版
- python单词意思-python实现单词本功能
- python基础代码-python基础,python基础代码大全