位移运算 java_java位运算&&位移运算

位移运算 java_java位运算&&位移运算位运算 位运算允许对整数中的单个比特进行操作 位运算会对连个操作数中对应的比特执行布尔代数运算 并产生一个结果 java 中有 3 种位运算符 amp 与 或 异或 非 看例子说明位运算的过程 publicclasst publicstatic String args inta 12 2 1100 0010System out prin

位运算:位运算允许对整数中的单个比特进行操作。位运算会对连个操作数中对应的比特执行布尔代数运算,并产生一个结果。

java中有3种位运算符:&(与) |(或) ^(异或) ~(非)

看例子说明位运算的过程:

public class test{

public static void main(String[] args){

int a=12|2; //1100|0010

System.out.println(a);

}

}

结果是14(1110)

位移运算操作的目标也是数字的二进制的位。用来操作位数的向左向右移动。

java种有3种基本的位移操作:

>>(右移) <>>(无符号右移)

<

看例子:

public class test{

public static void main(String[] args){

int a=8<<1;

System.out.println(a);

}

}

8的二进制表示:00000000 00000000 00000000 00001000

左移1位后二进制:00000000 00000000 00000000 00010000 -> 14

结果为14

tip:左移相当于num*(2^n) 其中num为被移数,n为移动的位数

>>:右移的道理也是一样的,注意的是:若最高位为1,移动后最高位用1来填充,否则用0来填充。

例子:

int a=-8>>1;

System.out.println(a);

-8的二进制:

右移后的二进制: -> -4

结果为-4

tip:右移相当于num/(2^n) 其中num为被移数,n为移动的位数

>>>:无符号右移跟右移原理是一样的,只是覆盖位的覆盖规则不同:不管最高位是0还是1,全部用0来填充。

例子:

int a=-8>>>1;

System.out.println(a);

-8的二进制:

无符号右移后的二进制:0 ->

tip:用无符号右移的时候要注意,绝对值很小的负数移动后都可能成为绝对值很大的正数,这在大多数情况下没意义。

奇葩的例外:

那代码:

int a=11>>32;

long b=12<<64;

System.out.println(a);

System.out.println(b);

int类型占32位,long类型占64位,这样子的话,上面的例子输出应该都是0才对,因为刚好将有效位都移走了,但结果并不是这样的。

输出的结果是:11 12

这跟java对位移的底层操作机制有关:

从结果可以看出两个数都没有变化,这是因为,在进行移位前,java首先将要移动的位数跟被移数的位数求余,然后去移动余数个位数。上面例子中,32对32求余,64对64求余,结果都是0,java系统对被移数进行0个位的移动,也就是没移动啦。

这样子的话,看下下面的代码:

int c=8>>33;

System.out.println(c);

因为int有32位,那么8实际上被移动的位数是:33%32=1;

就相当于:int c=8>>1;

结果自然是:4

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

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

(0)
上一篇 2026年3月17日 下午8:23
下一篇 2026年3月17日 下午8:23


相关推荐

  • 小程序wx.request用法

    小程序wx.request用法XXX JS onLoad function this getTableData onLoad end getTableData function 自定义函数名称 varthat this 这个地方非常重要 重置 data 里数据时候 setData 方法的 this 应为以及函数的 this 如果在下方的 su

    2026年1月18日
    3
  • 串口服务器调试助手使用教程,串口服务器如何配置及串口调试6大技巧

    串口服务器调试助手使用教程,串口服务器如何配置及串口调试6大技巧串口服务器如何配置相信很多用户不是很清楚;今天就针对串口服务器如何配置以及串口调试的6大技巧,加以总结阐述:1、如何设置串行服务器的串行端口属性,例如波特率具体参数及数值大小?①点击屏幕上的“设备”单元;②手动打字输入“程序设置”;③再手动选择“程序”,最后手动输入“串行参数”。2、怎样配置串口服务器?首先,必须了解熟悉自身的操作环境与应用配置参数(熟悉每个串行端口的操作模式、熟悉主要参数包括的网…

    2022年5月6日
    185
  • 🔥讯飞星火,免费还是收费?小白必看的良心解析来了!

    🔥讯飞星火,免费还是收费?小白必看的良心解析来了!

    2026年3月14日
    1
  • nano banana怎么替换头像

    nano banana怎么替换头像

    2026年3月15日
    1
  • pytest测试框架常用功能_unittest批量加载用例

    pytest测试框架常用功能_unittest批量加载用例目录前言###文章内容有配套的学习视频和笔记都放在了文章末尾###1、什么是单元测试框架2、单元测试框架主要做什么3、单元测试框架和自动化测试框架有什么关系4、Pytest测试框架说明5、Pytest框架和Unittest框架区别重点:配套学习资料和视频教学前言大家好我是测试达人,最近我会更新一系列pytest的框架全套教程,不比你在培训机构花的几千块买的ppt教程好吗?==白嫖真香!!###文章内容有配套的学习视频和笔记都放在了文章末尾###1、什么是单

    2022年10月14日
    7
  • matlab将两幅图进行融合_matlab拟合三维曲面

    matlab将两幅图进行融合_matlab拟合三维曲面matlab图像融合        [r,c]=size(y1);            %根据低频融合算法进行图像融合fori=1:r            %首先取两幅源图像相应的小波分解系数绝对值最大者的值作为融合图像的分解系数    forj=1:c        if(abs(y1(i,j))>=abs(y2(i,j)))            y3(

    2025年6月17日
    4

发表回复

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

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