java位运算

java位运算

位运算符分类
    java中位运算符主要有:按位与&、按位或|、按位非~、按位异或^。
 在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示

今年ccpc网络赛的第一题就是位运算。。、。

java中的位运算,涉及到计算机二进制,位用bit表示,1 byte=8bit,根据各种基本数据类型占用的字节空间,可以计算各种数据有多少位二进制,可以算出对应的取值范围

java中的位运算包括:与(&)运算,或(|)运算,亦或(^)运算,非(~)运算;以及移位运算:左移运算(<<),右移运算(>>),无符号右移运算(>>>),注意没有无符号左移运算。

1、与运算符&(and)

       与运算,两个数值进行与运算时,转换成二进制数据,两个数值中进行比对,位都为1,结果数值对应的位才为1,否则对应的位为0;

例如:5&6运算

十进制5对应的二进制为101

十进制6对应的二进制为110

运算结果为:100(二进制),则对应的十进制就是4;

2、或运算符 |(or)

      或运算,两个数值进行比对,只要有一个数值对应的位是1,则结果数值对应的位就为1,否则对应的位为0;

例如:5 | 6运算

十进制5对应的二进制为101

十进制6对应的二进制为110

与运算结果为:111(二进制),对应的十进制为7;

3、亦或运算符 ^(xor)

     亦或运算,两个数值进行比对,两个数值中,相同的位都为0或者都为1(即相同位值相同),则结果数值中对应的位则为0,不同,则结果数值中对应的位就为1;

例如:5 ^6运算

十进制5对应的二进制为101

十进制6对应的二进制为110

亦或运算之后的结果为:011,对应的十进制为3;

(注意:这里的^符号与我们平时用来做乘幂的^不同,java中不用^来做乘幂运算,java中做乘幂运算有数学函数Math.pow(x,a)来负责,表示x的a次方)

4、非运算符 ~(not)

非运算是针对单个数值来运算,数值转换成二进制后,对应的位是0,则结果数值中对应的位是1,如果位是1,则对应的结果的位是0

例如:~5

十进制5对应的二进制为101

非运算后结果为:010 ,对应的十进制为2

第二部分:移位运算

   运算符                                                             含义                      举例
     <<    左移运算符,表示将二进制数据向左移动相应的位数(在低位处补上相应位数的0)                 19<< 3
     >>    右移运算符,区别于“无符号”右移运算符,将运算符左边的十进制数值转换为二进制,然后整体向右移动运算符右边指定数的位数,使用符号拓展机制,如果值是正,则在高位补上0,反之为负,则在高位补上1                 19>>3
   >>>    “无符号”右移运算符,将运算符左边的十进制数值转为二进制后运算,二进制数据整体右移指定的位数,采用0扩展机制无论值为正负,都在高位补0               19>>>3
1、 分析左移运算

十进制19对应的二进制为10011,左移3位,原本5位的二进制,变为8位,多出的三位在低位,补0,结果为10011000,十进制数值为152,左移运算相当于原来的数值乘以2的位移位数次幂,如本例结果为19*2*2*2=152;

2、 分析有符号右移运算

十进制19对应的二进制为10011,右移3位,原本5位的二进制,变为2位(低位3位被挤掉),高位补三位,补0,结果为00010,十进制数值为2

当十进制取值为负数时,例如取值-19,则结果不同-19对应的二进制为

{补充负数二进制的获取方法:首先用-19的相反数19取二进制为10011,19的二进制10011为原码(一个整数按照绝对值大小转换成的二进制数,是为原码。32位,前面是0省略掉了),然后取反(0的变成1,1的变成0。),得到反码11111111111111111111111011101100,反码在加1为11111111111111111111111011101101得到的是补码,则-19表示为二进制就是11111111111111111111111011101101,-19右移3位,高位补1,二进制为1111111111111111111111111111101),对应十进制为-3;

 

3、分析无符号右移运算(int值占4字节,因为用的eclipse测试,是用的32位)

19>>>3,对应的十进制结果也是2

-19>>>3,-19对应的二进制为11111111111111111111111111101101,-19右移3位,高位补0,则为00011111111111111111111111111101,对应的十进制为536870909;

 

最后上一 波代码吧,部分解释来源于网络。

package fsaga;

public class gs {

	public static void main(String[] args) 
	{
		System.out.println("5&6= "+(5&6));
		System.out.println("5|6= "+(5|6));
		System.out.println("5^6= "+(5^6));
		System.out.println("19<<3= "+(19<<3));
		System.out.println("19>>3="+(19>>3));
		System.out.println("-19>>3="+(-19>>3));
		System.out.println("19>>>3="+(19>>>3));
		System.out.println("-19>>>3="+(-19>>>3));
	}

}

 

结果为:

java位运算

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114851.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker stats详解_docker socket

    docker stats详解_docker socketOS:Centos    1.安装编译时所需文件       yuminstallbisongccgcc-c++autoconfautomakezlib*libxml*ncurses-devellibtool-ltdl-devel*    2.安装Cmake       wgethttp://www.cmake.org/fi

    2022年8月24日
    7
  • (一)什么是流程引擎?为什么学习流程引擎?

    activity(流程引擎)从零入门到实战学习欢迎使用Markdown编辑器1.什么是流程引擎?2.为什么需要学习流程引擎?3.为什么选择activiti?功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编

    2022年4月5日
    246
  • Qt面试题(二)

    Qt面试题(二)QT理论试题1以下关于QT的描述正确的是a.是一个不跨平台的C++图形用户界面b.由挪威TrollTech公司出品c.只支持Unix、Linuxd.QTAPI和开发工具对所支持的平台是不一致的2以下关于QT的描述不正确的是a.QT支持2D图形渲染b.QT支持3D图形渲染c.QT支持OpenGL d.QT不支持XML…

    2022年6月25日
    40
  • TiKV 源码解析系列文章(十三)MVCC 数据读取

    TiKV 源码解析系列文章(十三)MVCC 数据读取作者:施闻轩在《TiKV源码解析系列文章(十二)分布式事务》中,我们介绍了如何在满足事务特性的要求下进行数据写入。本文将介绍数据读取的流程。由于顺序扫(ForwardScan)比较具有代表性,因此本文只介绍顺序扫的流程,而不会介绍点查或逆序扫。点查是顺序扫的简化,相信读者理解了顺序扫的流程后能自己想出点查的实现,而逆序扫与顺序扫也比较类似,主要区别在于从后向前扫,稍复杂一些,相信大家在阅…

    2022年9月23日
    5
  • C++11 decltype 的用法

    C++11 decltype 的用法文章目录decltype的意义decltype的用法1.推导规则2.举例说明3.模版案例更多细节问题C++14取消decltype其他decltype的意义参考博客:C++11新标准:decltype关键字有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了)。为了满足这一需求,C++11新标准引入了decl…

    2025年9月6日
    5
  • idea 2021.5 mac 激活码(最新序列号破解)

    idea 2021.5 mac 激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号