一、位运算符简介:

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中的按位运算的更多相关文章

  1. Java中的Bigdecimal类型运算

    Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigD ...

  2. JAVA程序开发按位运算的记录

    忘记在哪里看到一个面试题:把int a,b的值互换,不能使用临时变量.刚开始完全懵逼,脑子里面全是浆糊,不知道如何下手.查看答案后猛地一惊,心想居然还有这种操作,真是叹为观止,真的感觉自己的基础是如此 ...

  3. 【转】Cocoa中的位与位运算

    转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...

  4. Python语言中的按位运算

    (转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...

  5. Integer中的奇妙位运算

    Integer中的奇妙位运算 参考资料 https://segmentfault.com/a/1190000015763941 highestOneBit(int i) 函数的作用是获得传入参数的最高 ...

  6. 关于java中Double类型的运算精度问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

  7. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  8. JAVA基础1——字节&位运算

    占用字节数 & 取值范围 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...

  9. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

随机推荐

  1. jsp (2)

    一.内置对象: 二.如何在代码中使用js代码: <script type="text/javascript" src="js的路径名"></s ...

  2. [ZJOI2018]历史

    [ZJOI2018]历史 最大化access轻重链的切换次数 考虑一个点的贡献,即它交换重儿子的次数 发现这个次数只和它自己ai以及每个儿子的子树次数和有关. 一个关键的事实是: 我们可以自上而下进行 ...

  3. 洛谷P3980 志愿者招募

    题意:懒得写了...... 解: 一开始想的是每天建点,每种人建点,然后连边费用流,发现一个人可以管辖多天,不好处理. 回想起了网络流24题中的"最长k可重线段集","最 ...

  4. (转)c++ 回调函数

    https://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数. 在理解“回调 ...

  5. python pip NameError:name 'pip' is not defined”

    https://www.jianshu.com/p/f57f98ebcb21 问题: 如果直接在命令行里面输入pip或者pip3,提示:(如图1) “NameError:name 'pip' is n ...

  6. java8 List<对象> 转 Set、Map(高级)

    实体类 public class Student { private int id; private String name; private String score; private int cl ...

  7. mfc 中的error RC2104 : undefined keyword or key name

    http://bbs.csdn.net/topics/340253236 需要在此文件中添加该按钮 声明一下. 但是在resource.h中已经定义了:#define IDC_ETHCONF_CHKP ...

  8. GD32 ------ 使用外部中断,中断函数需要延时才能读到真正电平

    MCU:GD32F103RCT6 中断引脚没有外界上拉电阻 中断配置如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFI ...

  9. linux文件或目录权限修改后如何恢复(备份了权限就能恢复)

    操作系统 RHEL5 如果你在linux上执行了如下操作chmod -R 777 / 或者 chmod -R 700 /那么恭喜你,你的系统即将崩溃,重启之后,你进不了图形界面,而且很多服务都起不来 ...

  10. 下载神器(vip下载速度)

    简单介绍: 用过好几款下载神器,现在推荐一款比较好用的软件,强调一点本软件强调开源免费的原则,禁止一切人员在其中收取费用. 我把这款软件放到了,自己的百度云盘. 神器的使用教程如下: 百度云下载连接: ...