首页编程java编程java位运算是什么意思,java位运算符有什么区别

java位运算是什么意思,java位运算符有什么区别

编程之家2023-10-14122次浏览

大家好,今天来为大家分享java位运算是什么意思的一些知识点,和java位运算符有什么区别的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java位运算是什么意思,java位运算符有什么区别

java位运算符详解

运算符含义示例

~按位非(NOT) b=~a

&按位与(AND) c= a& b

java位运算是什么意思,java位运算符有什么区别

|按位或(OR) c= a| b

^按位异或(XOR) c= a ^ b

>>右移 b= a>> 2

java位运算是什么意思,java位运算符有什么区别

>>>右移,左边空出的位以0填充 b= a>>> 2

<<左移 b= a<< 1

当然同样有&=,|=,^=,>>=,>>>=,<<=。

有关这些操作的细节可以参看

www.pcvc.net/...id=247

位运算

前面介绍的各种运算都是以字节作为最基本位进行的。但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。

一、位运算符C语言提供了六种位运算符:

&按位与

|按位或

^按位异或

~取反

<<左移

>>右移

1.按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下: 00001001(9的二进制补码)&00000101(5的二进制补码) 00000001(1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a的高八位清 0,保留低八位,可作 a&255运算( 255的二进制数为0000000011111111)。

main(){

int a=9,b=5,c;

c=a&b;

printf("a=%d\nb=%d\nc=%d\n",a,b,c);

}

2.按位或运算按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下: 00001001|00000101

00001101(十进制为13)可见9|5=13

main(){

int a=9,b=5,c;

c=a|b;

printf("a=%d\nb=%d\nc=%d\n",a,b,c);

}

3.按位异或运算按位异或运算符“^”是双目运算符。

java位运算符有什么区别

两者只有一个区别,即作用不同。

1、>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1。如:int i=15; i>>2的结果是3,移出的部分将被抛弃。

转为二进制的形式可能更好理解,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3)。

java中测试代码如下:

2、>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。其他结构和>>相似。

测试代码如下:

扩展资料:

一、其他位运算符:

二、运算符之间,按优先级顺序排列为:

1:~;

2:<<、>>;

3:&;

4:^;

5:|;

6:&=、^=、|=、<<=、>>=。

参考资料来源:百度百科--位运算符

参考资料来源:百度百科-->>

JAVA 位运算 (byte) (a << 2); 是什么意思

您好,你的问题,我之前好像也遇到过,以下是我原来的解决思路和方法,希望能帮助到你,若有错误,还望见谅!展开全部

你看下这篇文章就清楚了

首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。

左移位:<<,有符号的移位操作

左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充

右移位:>>,有符号的移位操作

右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。

例子:

public static void main(String[] args)

{

System.out.println(3<<2);//3左移2位

System.out.println(-3<<2);//-3左移2位

System.out.println(6>>2);//6右移2位

System.out.println(-6>>2);//-6右移2位

}

输出结果

12

-12

1

-2

下面解释一下:

00000000 00000000 00000000 00000011+3在计算机中表示

00000000 00000000 00000000 0000001100左移2位,补0,结果为12

----------------------------------------------------------------------------------------------

00000000 00000000 00000000 00000011+3在计算机中表示

11111111 11111111 11111111 11111100

11111111 11111111 11111111 11111101-3在计算机中表示

11111111 11111111 11111111 1111110100左移2位,补0,结果为负数,就是补码了,求原码

10000000 00000000 00000000 00001011

10000000 00000000 00000000 00001100结果-12

----------------------------------------------------------------------------------------------

这也说明了一个问题:在计算机中,以1开头的就是补码的形式,是负数。

00000000 00000000 00000000 00000110+6在计算机中表示方法

0000000000 00000000 00000000 00000110右移两位,正数补0,结果为1

----------------------------------------------------------------------------------------------

00000000 00000000 00000000 00000110+6在计算机中表示方法

11111111 11111111 11111111 11111001

11111111 11111111 11111111 11111010-6在计算机中的表示

1111111111 11111111 11111111 11111010右移两位,结果为负数

1000000000 00000000 00000000 000001

1000000000 00000000 00000000 000010结果为-2

这个地方很容易弄混,多想几次就会慢慢理解了。

上面解释了带符号的移位操作,下面解释一下不带符号的移位操作

无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0

例如:

public static void main(String[] args)

{

System.out.println(6>>>2);

System.out.println(-6>>>2);

}

结果:

1

1073741822

分析:

00000000 00000000 00000000 00000110+6在计算机中表示方法

0000000000 00000000 00000000 00000110右移两位,正数补0,结果为1

-----------------------------------------------------------------------------------------------------

00000000 00000000 00000000 00000110+6在计算机中表示方法

11111111 11111111 11111111 11111001

11111111 11111111 11111111 11111010-6在计算机中的表示

0011111111 11111111 11111111 11111010右移两位,补充0,结果为1073741822

以下来自:

可以参考

移位操作要注意的问题是高(低)位是补0还是补1和对char, byte, short型的操作:

(1)<<:(left-shift),最低位补0

(2)>>:(signed right-shift),右移过程使用符号位扩展(sign extension),即如果符号为为1则高位补1,是0则补0,也就是逻辑右移

(3)>>>:(unsigned right-shit),右移过程使用零扩展(zero extension),即最高位一律补0,也就是算术右移

(4)移位操作的数据类型可以是byte, char, short, int, long型,但是对byte, char, short进行操作时会先把它们变成一个int型,最后得到一个int型的结果,对long型操作时得到一个long型结果,不可以对boolean型进行操作。

(5)移位操作符可以和=合并起来,即<<=、>>=和>>>=。例如 a>>= 2;表示将a右移两位后的值重新赋给a。当时在使用这三个操作符对 byte, char, short型数据进行操作时要注意,例如有一下代码片段:非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

张秋献(张秋献的画值钱吗)java大学学什么软件下载,学习java 的软件有哪些