Java中的按位运算
一、位运算符简介:
1.按位与&。如果两个整形数据 a、b 对应位都是1,则结果位才为1,否则为0,(int 最大值0x7fffffff ):
int a = 0x7fffffff;
int b = 12;
int c = 0;
int aAndB = a&b; // aAndB is 12
int aAndC = a&c; // aAndC is 0
2.按位或|。如果两个操作数都是0,则结果为0,否则为1:
int a = 0x7fffffff;
int b = 12;
int c = 0;
int aOrB = a|b; // aOrB is 2147483647
int aOrC = a|c; // aOrC is 2147483647
3.按位取反~。当操作数的二进制表示相同时,1位为0,0位为1:
int a = 0x7fffffff;
int b = 12;
int c = 0;
a = ~a; // result is -2147483648
b = ~b; // result is -13;
c = ~c; // result is -1;
4.按位异或^。当两个操作位二进制表示相同时结果为0,否则为1:
int a = 0x7fffffff;
int b = 12;
int c = 0;
c ^= a; // c is 2147483647
b ^= 8; // b is 4
a ^= a; // a is 0
5.左移<<。左移右边操作数指定的位数,左边移动的部分补0:
int a = 0x7fffffff;
int c = 3;
c <<= 1; // c is 6
a <<= 1; // a is -2
6.右移>>。跟左移不同,如果最高位为0,则右移补0。如果最高位为1,则右移补1:
int a = 0x7fffffff;
int a = 0x7fffffff;
int b = 0;
int c = 3;
int d = -2;
int e = -1;
c >>= 1; // c is 1
a >>= 1; // a is 1073741823
b >>= 1; // b is 0
d >>= 1; // d is -1
e >>=1; // d is -1
7.无符号右移>>>。无论最高位是0还是1,左侧被移空的高位都填入0。
二、利用按位运算符,在很多情况下,可以进行方便的计算。
将大写字母变为小写,将小写字母变为大写( charArray[i]^= 32, 因为在ASCII码中,大写字母与小写字母差了32,因此使用异或运算符,通过与 0 相异或,原字符的二进制形式在其他位保留原有的值,在第 6 位相异或,如果原有位为 0 则变为 1, 原有位为 1 则变为 0):
String tempString = "1a2b3E5F6P7p";
char [] charArray = tempString.toCharArray();
for(int i = 0; i < charArray.length; i++)
if(Character.isLetter(charArray[i])) charArray[i] ^= 32;
System.out.println(String.valueOf(charArray)); // result is 1A2B3e5f6p7P
Java中的按位运算的更多相关文章
- Java中的Bigdecimal类型运算
Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigD ...
- JAVA程序开发按位运算的记录
忘记在哪里看到一个面试题:把int a,b的值互换,不能使用临时变量.刚开始完全懵逼,脑子里面全是浆糊,不知道如何下手.查看答案后猛地一惊,心想居然还有这种操作,真是叹为观止,真的感觉自己的基础是如此 ...
- 【转】Cocoa中的位与位运算
转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...
- Python语言中的按位运算
(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...
- Integer中的奇妙位运算
Integer中的奇妙位运算 参考资料 https://segmentfault.com/a/1190000015763941 highestOneBit(int i) 函数的作用是获得传入参数的最高 ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- JAVA基础1——字节&位运算
占用字节数 & 取值范围 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...
- java加密解密算法位运算
一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...
随机推荐
- [SDOI2011]计算器(BSGS)
洛古题面 对于操作一,用快速幂算即可 代码如下 int quickpow(int a,int b,int k) { int r=1; while(b) { if(b&1) r=(r*a)%k; ...
- bzoj3467: Crash和陶陶的游戏
就一篇题解: BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线,建出Atrie树:B树的倍增哈希数组,节点按照到根路径字典序排序 2. ...
- Django(四)框架之第三篇模板语法
https://www.cnblogs.com/yuanchenqi/articles/6083427.htm https://www.cnblogs.com/haiyan123/p/7725568. ...
- linux系统调用之网络管理1
getdomainname 取域名 setdomainname 设置域名 gethostid 获取主机标识号 sethostid 设置主机标识号 gethostname 获取本主机名称 sethost ...
- Linux平台中使用PHP让word转pdf
1.ubantu下安装libreoffice sudo apt-get install libreoffice 2.命令行执行word转pdf 将 /home/wordToPdf/ ...
- goto语句
让程序直接跳到自定义标签位置 public static void Main(string[] args) { ; goto myLabel;AppDomainInitializer//直接跳到标签m ...
- windows server 2012 流媒体服务器搭建(直播与点播)
IIS Live Smooth Streaming(实时平滑流式处理)是微软下一代流媒体解决方案.该技术是在IIS web中集成媒体传输平台IIS media services,实现利用标准 HTTP ...
- Luogu P4484 [BJWC2018]最长上升子序列
状压\(DP\)+打表,要命的题目..... 具体思路请参考这位巨佬的博客,本蒟蒻对这道题感到心力交瘁,决定不再作出补充.. 关键的要学习的是:对于排列问题,从左到右处理比较困难的话,考虑从小到大把数 ...
- (LIS) P1091 合唱队形 洛谷
题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...
- plsql无法正常显示汉字
首先执行语句 select * from V$NLS_PARAMETERS 查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否为SIMPLIFIED CHINES ...