网站建设资讯

NEWS

网站建设资讯

java位运算符的代码,java位运算符号

Java中位运算符的具体应用是什么,在实际编程中有什么作用

位逻辑运算符有“与”(AND)、“或”(OR)、“异或(XOR)”、“非(NOT)”,分别用“”、“|”、“^”、“~”表示。

成都创新互联公司是一家专业提供察雅企业网站建设,专注与成都网站设计、做网站、H5网站设计、小程序制作等业务。10年已为察雅众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

下面的例子说明了位逻辑运算符:

// Demonstrate the bitwise logical operators.

class BitLogic {

public static void main(String args[]) {

String binary[] = {

"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",

"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"

};

int a = 3; // 0 + 2 + 1 or 0011 in binary

int b = 6; // 4 + 2 + 0 or 0110 in binary

int c = a | b;

int d = a b;

int e = a ^ b;

int f = (~a b) | (a ~b);

int g = ~a 0x0f;

System.out.println(" a = " + binary[a]);

System.out.println(" b = " + binary[b]);

System.out.println(" a|b = " + binary[c]);

System.out.println(" ab = " + binary[d]);

System.out.println(" a^b = " + binary[e]);

System.out.println("~ab|a~b = " + binary[f]);

System.out.println(" ~a = " + binary[g]);

}

}

在本例中,变量a与b对应位的组合代表了二进制数所有的 4 种组合模式:0-0,0-1,1-0,和1-1。“|”运算符和“”运算符分别对变量a与b各个对应位的运算得到了变量c和变量d的值。对变量e和f的赋值说明了“^”运算符的功能。字符串数组binary代表了0到15对应的二进制的值。在本例中,数组各元素的排列顺序显示了变量对应值的二进制代码。数组之所以这样构造是因为变量的值n对应的二进制代码可以被正确的存储在数组对应元素binary[n]中。例如变量a的值为3,则它的二进制代码对应地存储在数组元素binary[3]中。~a的值与数字0x0f (对应二进制为0000 1111)进行按位与运算的目的是减小~a的值,保证变量g的结果小于16。因此该程序的运行结果可以用数组binary对应的元素来表示。

>运算符,看代码。'>Java 移位>>运算符,看代码。

-4的二进制表示为1111 1111 1111 1011

i3 右移3位,移出的不管,左端补1 变为1111 1111 1111 1111 这是-1的二进制表示,所以结果为-1.

i5 同理。

具体原理:

先来说一下怎么得出负数的二进制。原码,反码,补码,这三个概念搞清。

1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

10000000 00000000 00000000 00000101 是 -5的 原码。

备注:

比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。

2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101

负数10000000 00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010。

反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。

备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。

3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如:10000000 00000000 00000000 00000101 的补码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减一,再取反。

2、补码却规定0没有正负之分

所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

搞懂二进制表示后,再来说一下左移右移运算符。

左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。(均由机器来定)

So,为什么得到-1知道了吧~~~

JAVA位运算符

| ^ ~

与 : 1010 1100 = 1000

或| :1010 |1100=1110

异或^ :1010^1100=0110

左移:11002=0000

右移:正数00112=0000 负数情况高位补1

右移:正数,负数高位都补0

java 位运算符和逻辑运算符,有什么区别,&和&&

true

=

1

false

=

再看下面这段文字

一、逻辑运算符:

包括:1。逻辑与

2。||逻辑或

3。!逻辑非

逻辑运算符用于对包含关系运算符的表达式进行合并或取非

对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释

请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成=

=是错误的。

假设一个程序在同时满足条件a10和b==7时,必须执行某些操作。应使用关系运算符和逻辑运算符“与”来写这个

条件的代码。用表示“与”运算符,该条件代码如下:

(a10)

(b==7);

类似地,“或”是用于检查两个条件中是否有一个为真的运算符。它由两个连续的管道符号(||)表示。如果上例

改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下:

(a10)

||

(b==7);

第三个逻辑运算符“非”用一个感叹号(!)表示。这个运算符对表达式的真值取反。例如,如果变量s小于10,程序

程序需执行某些操作,则条件代码如下:

(s10)

(!(s=10))

//s不大于等于10

关系运算符和逻辑运算符的优先级一般都低于算术运算符。例如,54+3的计算与5(4+3)运算符是一样的,即

先计算4+3,再执行关系运算。此表达示的结果为“假”,即,将返回0。

下面的语句

printf("%d",54+3);

将输出

可以总结为:的结果是真真为真。||的结果是假假为假。

二、位运算符:

包括:1。位与符

2。|位或符

3。^位异或符

4。~位取反符

以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值

可以是任意进制的:十进制、八进制或十六进制。位运算符则将操作数转化为二进制,并相应地返回1或0。

位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。例如:

表达式1015表示(1010

1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1

表达式10|15表示(1010

|

1111),它将返回表示1111的值15。假假得假。全零得零。

表达式10^15表示(1010

^

1111),

它将返回表示0101的值5。此时是同性相斥,相同的就为假。

表达式~10表示(~1010),它将返回表示0101的值

-11。此号好理解,按位取反

java 位运算符 ~求解过程。 int m = 8; System.out.println(~m);

正数取~:-(a+1)

负数取~:(a+1)

8是正数,补码与其源码相同。为:0(符号位)...0001000(因为默认是int型所以32位)

对其~操作后为:1(符号位)...1110111

显霸气编程源码:取反加1(除去符号位)

1) 1(符号位)...1001000 除去符号取反

2) 1(符号位)...1001001 除去符号加1

所以最后是-9


网站标题:java位运算符的代码,java位运算符号
本文网址:http://njwzjz.com/article/hocsdh.html