Java中的这几个位运算符有大神讲解一下不?最好举生活中的例子,谢谢!

如题所述

/**
我通俗点说:在位运算里面,其实大多数都是进行二进制运算的,也就是0和1,之间的运算!

以下例子里面:0代表假,1代表真;

按位与:&  

真与真=真;(1&1=1)

假与假=假;(0&0=0)

真与假=假;(1&0=0)

假与真=假 ;(0&1=0)

总结(在按位与里面,逢假(0)必假(0));

-----------------------------------------------------------------
按位或:|  

真与真=真;(1|1=1)

假与假=假;(0|0=0)

真与假=假;(1|0=1)

假与真=假 ;(0|1=1)

总结(在按位或里面,逢真(1)必真(1));

-----------------------------------------------------------------
按位异或:^ 

真与真=真;(1^1=0)

假与假=假;(0^0=0)

真与假=假;(1^0=1)

假与真=假;(0^1=1)

总结(在按位或里面,相同就(0)不同则(1));

----------------------------------------------------------------
按位非~

这个我思前想后了很久,我觉得我不好更通俗的讲解;
(请原谅,我尽可能的保持通俗)
我要是跟你讲这个,你需要了解一点基本知识,才比较好理解一点!

你了解这个:(源码--反码---补码),我比较好讲一点!

a:所有字面值常量(你暂时理解基本数字):他们在内存里面存储的时候,都是以二进制的补码形式存在的!

b:不管正数还是负数,在内存里面存储都是补码!

c:不同点就是:正数的源码,反码,补码,都一样!

d:负数则不一样,一个负数的补码,是该正数的源码--->逐位取反--->然后末尾+1--->得到的就是该负数在内存里面存储的形式(补码)!

e:正数的最高位,即(最左边第一位是0,其他位有效值位),负数的最高位,即(最左边第一位是1,其他位是有效数值位!)

好了,基本知识我说完了,不好意思我只有这能力了,能不能看懂完全看造化了!

--->>进入主题:

按位非,是一元运算符:

它的作用是一把个数字的补码,逐位取反,得到另外一个数字的补码!这个我觉得需要举例比较容易理解一点:

例子:假如(非5:~5),因为5是正数,所以5的二进制在内存里面形式都一样,举短一点的吧,byte类型,8位!

0 0 0 0 0 1 0 1<<---5的二进制;

1 1 1 1 1 0 1 0<<---按位非~,0变1,1变0(变完以后,这个是另外一个数字的补码,因为是负数,我们不好看,但是我们可以还原他的正数,就知道该数是几了!)

0 0 0 0 0 1 0 0<<---按照上面d步骤逆向过来,末尾-1--->>逐位取反--->>得到该数正数的原码!

所以你看这个数字有效位是4;所以,上面的那个负数补码就是-4,总结( ~5 = -4 );

我天,我都尽可能说详细了...还是觉得怕你看不明白!

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

左移:<<(理解是乘法,2的n次幂,2是底数!)--->>低位补零

5<<2=20   等价 5x(2x2)=20
6<<3=48   等价 6x(2x2x2)=48
4<<4=64   等价 4x(2x2x2x2)=64

右移:>>(理解是除法,倍率同上)---->>如果是正数,在高位补零,如果是负数,则在高位补1
8>>2=2    等价  8÷(2x2)=2;
16>>3=2   等价  16÷(2x2x2)=2;
-16>>3=-2 等价  -16÷(2x2x2)=-2;

无符号右移>>>(和右移是一回事,区别在后面)--->不管正负数:高位都是补0;

16>>3=2   等价  16÷(2x2x2)=2;
-16>>3=-2 等价  16÷(2x2x2)=2;

(不管正负还是负数,结果都是正数,懂了?这就是无符号右移的区别!)

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

这些知识都是非常基础的知识,很关键,也很重要,如果我说的你看不懂,也没关系,你可以跳过这一步,向后面学习

学一段时间后,在回头看看..会恍然大悟的!!

不好意思解答能力有限:不足之处还请路人..指点!!
*/

温馨提示:内容为网友见解,仅供参考
无其他回答

JAVA里面的位运算符>>,<<,>>>是什么意思,请举个列子具体说明一下?_百 ...
上面举的例子15<<2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的高位中包含1。

java运算符有哪些。求解一定要全 还有中文标注,谢谢了。
双目:+ - * \/ %(取余)三目:a>b?true:false 说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个表达式或者是值或者是对象。二、关系运算:等于符号:==,不...

JAVA中的“>>”和“>>>”运算符
1、>>:右移运算符,num >> 1,相当于num除以2。按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。如:-1在32位二进制中表示为:11111111 11111111 11111111 11111111 -1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 ...

java 中|| 和 && 这类的符号都表示什么?
&&和||是一种逻辑运算符,&&是逻辑与,当两个数都为真,则结果为真。||是逻辑或,两个数任意一个为真,则结果为真。举个例子:1、a && b 当a、b都为真时,结果为真。有一个为假或者都为假时结果为假。2、a || b 当a、b有一个为真时,结果为真。a、b都为假时结果为假。

JAVA位运算符
但是,我们可能不会过多地使用到位运算符。 如果两个输入位都是 1,则按位“与”操作符(&)生成一个输出位 1;否则生成一个输出位0。如果两个输入位里只要有一个是1,则按位“或”操作符(|)生成一个输出位1;只有在两个输入位都是0的情况下,它才会生成一个输出位0。如果两个输入位的某一个是1,但不...

java中 << 什么意思?比如1<<30,谢谢哦~~
是位移运算服, <<左移运算,>>右移运算,还有不带符号的位移运算 >>>.左移的运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 0000 0000 0000 0000 0001 然后将上面的二进制数字向左移动...

这里有几道java题,求大神帮忙解答下好吗?非常感谢!
3、包导入使用这个不需要解释,很简单,就是你用到哪个类,就需要将那个导入的类所在的包路径导入 4、接口关键字:implements 5、抛出异常可以两种方法:一种是try ... catch... 抛异常,一种是直接在类名后面throws抛异常 6、都能够表示当前,区别在于super可以调用父类 7、接口和抽象类的区别在于...

...学习java 遇到这种问题就犯迷,求各位大神讲解一下。 8%2 \/\/_百度...
这个不是Java问题,是数学问题,数学取余数的问题。8%2,商是4,余数为0,应为8除以2能除尽。2%8,商是0,余数为2, 2除以8不能除尽。

求一JAVA高手
1.常用的三种流程控制:顺序结构 选择结构 循环结构 2.分支语句分为if分支语句和switch分支语句 3.循环分为for循环、do-while循环以及while循环,在循环中嵌套循环既可以派生循环 4.考虑类的访问权限,字段的访问权限,类中包括哪些方法,方法访问权限。是否该类需要设定为抽象类(abstract类,不能被实例...

...请高手详细解释一下如上问题的计算过程,谢谢!!
具体的还需要知道一般顺序:算术>关系>逻辑 移位,逻辑位插中间:这句意思就是把移位>>,<<插到算术和关系的中间;逻辑位插到关系和逻辑中间,差不多就记住了 结合性口诀:123赋值,自加减,乘除余,这几个运算符是右结合,别的都是左结合 慢慢理解吧,不知道对你有没帮助,我是这样记的 ...

相似回答