java位操作总结
在计算机中所有数据都是以二进制的形式储存的。
位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。
方便演示,首先写个二进制打印方法:
private static void printNum(int n){
String num = Integer.toBinaryString(n);
if(num.length() == 32){
System.out.println(num);
}else{
StringBuilder sb = new StringBuilder("");
for(int i =0;i < 32 - num.length(); i ++){
sb.append("0");
}
System.out.println(sb.toString() + num);
}
}
1、~操作符(取反),对应二进制位取反,0变成1,1变成0
int num = 3;
printNum(num);
printNum(~num);
结果如下:
00000000000000000000000000000011
11111111111111111111111111111100
2、&操作符(与),对应二进制位进行与操作,都为1时变成1,其他变为0
int num1 = 3;
int num2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 & num2);
结果如下:
00000000000000000000000000000011
00000000000000000000000000000111
00000000000000000000000000000011
3、|操作符(或)对应二进制位进行或操作,都为0时变成0,其他变为1
int num1 = 4;
int num2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 | num2);
结果如下:
00000000000000000000000000000100
00000000000000000000000000000111
00000000000000000000000000000111
4、^操作符(异或),对应二进制位相同时,该位变成0,否则变成1
int num1 = 5;
int num2 = 9;
printNum(num1);
printNum(num2);
printNum(num1 ^ num2);
结果如下:
00000000000000000000000000000101
00000000000000000000000000001001
00000000000000000000000000001100
5、<<操作(左移),二进制位向左移动,右边填充0
int num1 = 5;
printNum(num1);
printNum(num1 << 2);
结果如下:
00000000000000000000000000000101
00000000000000000000000000010100
6、>>操作(右移),二进制位向右移动,左边填充0
int num1 = 5;
printNum(num1);
printNum(num1 >> 2);
结果如下:
00000000000000000000000000000101
00000000000000000000000000000001
位操作常见应用
1、不使用中间变量交换两个数
int num1 = 2;
int num2 = 5;
num1 = num1^num2;
num2 = num2^num1;
num1 = num1^num2;
System.out.println("num1:" + num1 +"\n"+ "num2:" + num2 );
2、求2的N次方
//求2的32次方:
System.out.println(Math.pow(2, 32));
System.out.println(1L<<32);
3、判断奇数偶数
int num1 = 4;
int num2 = 9;
if(num1%2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
System.out.println((((int)num1&1) == 1) ? "奇数" : "偶数");
System.out.println((((int)num2&1) == 1) ? "奇数" : "偶数");
4、求绝对值
int num = -3;
System.out.println(Math.abs(num));
int i = num >> 31;
System.out.println(i == 0 ? num : (~num + 1));
java位操作总结的更多相关文章
- Java位操作全面总结
转载: Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到 ...
- JAVA 位操作学习
一,基础知识 计算机中数值的编码方式中,原码.反码.补码. 正数的补码与原码相同,负数的补码为:负数的原码符号位不变,其它位取反,再加1. 在计算机中,数值是以补码的形式存储的.补码的好处: ①用补码 ...
- Java位操作全面总结[ZZ]
Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千 ...
- java 位操作 bitwise(按位) operation bit
java 位操作 bitwise(按位) operation bit //一篇对于 原码 反码 补码 的介绍 http://www.cnblogs.com/zhangziqiu/archive/201 ...
- 一道面试题与Java位操作 和 BitSet 库的使用
前一段时间在网上看到这样一道面试题: 有个老的手机短信程序,由于当时的手机CPU,内存都很烂.所以这个短信程序只能记住256条短信,多了就删了. 每个短信有个唯一的ID,在0到255之间.当然用户可能 ...
- java 位操作的总结
2014-05-07 17:14 今天工作上需要一个Byte的低5位,高3位.所以查询了资料.总结下如何实现 百度到一个资料: 介绍的很详细 基础知识: http://www.blogjava.net ...
- Java位操作
无论说是在哪一门计算机语言,位操作运算对于计算机来说肯定是最高效的,因为计算机的底层是按就是二进制,而位操作就是为了节省开销,加快程序的执行速度,以及真正的实现对数的二进制操作. 使用位操作 ...
- 可能是最通俗易懂的 Java 位操作运算讲解
https://blog.csdn.net/briblue/article/details/70296326
- 通俗易懂的 Java 位操作运算讲解
所有数值都是2进制 软件开发者都知道 10 进制.16 进制.8 进制. 比如数字 10 的各位进制形式表现如下. 十进制:10 八进制:012 十六进制:0x0a 二进制:1010 原码 反码 补码 ...
随机推荐
- golang笔记——并发
go语言中的main函数也是运行在一个单独的goroutine中的,一般称为 main goroutine,main函数结束时,会打断其它 goroutine 的执行,但是其它 goroutine 不 ...
- [Linux] Linux指令汇总(持续更新中...)
写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学L ...
- Mac Pro 资源管理器 Double Commander“个性化设置” 备份
操作系统自带的资源管理器,总是有些别扭的地方,在 Windows 系统下,我一般用 Total Commander(破解版)来作为替代品.现在换为 Mac 系统,自带的 Finer 也不怎么好用,连最 ...
- Discuzx系统 CSS 编码规范,CSS属性书写顺序
1. 属性写在一行内,属性之间.属性名和值之间以及属性与“{}”之间须有空格,例如:.class { width: 400px; height: 300px; } 2. 属性的书写顺序: ...
- PHP大数(浮点数)取余
一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int ...
- 如何挂载阿里云Linux服务器的“数据盘”(新购买)
详细操作参考: http://jingyan.baidu.com/article/90808022d2e9a3fd91c80fe9.html 用到的命令行汇总: 1.查看磁盘: fdisk -l 2. ...
- C和指针 第十二章 使用结构和指针 双链表和语句提炼
双链表中每个节点包含指向当前和之后节点的指针,插入节点到双链表中需要考虑四种情况: 1.插入到链表头部 2.插入到链表尾部 3.插入到空链表中 4.插入到链表内部 #include <stdio ...
- 1·3 对 git 的认识
我可以诚实的说:这是我第一次听见这个名词 GIT.老师您发的关于git链接我下载了,只是还没看完.所以以下只是片面的理解,在后期我会单独再发一次. 一·GIT的简单介绍 1·Git是一款免费.开源的分 ...
- java后端制作MD5加密
由于一次业务的需要,我制作了一次密码的修改子业务. 当用户忘记密码的情况下,我需要动态的发给他一个6位的随机密码,通过即时通,短信,微信等.并同时修改数据库中的原密码为这6位的随机密码.让用户再去修改 ...
- PYTHON 写函数,计算传入字符串中【数字、字母、空格、以及其他的个数】
def func1(s): al_num = 0 spance_num = 0 digit_num = 0 others_num = 0 for i in s: if i.isdigit(): # i ...