**版权声明一:**本文为博主原创文章,转载请附上原文出处链接和本声明。
**版权声明二:**本网站的所有作品会及时更新,欢迎大家阅读后发表评论,以利作品的完善。
**版权声明三:**对不遵守本声明或其他违法、恶意使用本网内容者,保留追究其法律责任的权利。
Java中的「与运算 & 」 规则 :都为1时才为1,否则为0
- 即:两位同时为“1”,结果才为“1”,否则为0
例如:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public static void main(String args[]) { System.out.println( 7 & 9); /* * 7的二进制 * 7/2=3...1 * 3/2=1...1 * 1/2=0...1 * 直到商为0,将余数倒过来就是111 * 于是得数是111 */ /* * 9的二进制 * 9/2=4...1 * 4/2=2...0 * 2/2=1...0 * 1/2=0...1 * 于是得数是1001 */ /* * 7二进制 0111 * 9二进制 1001 * ------------ * 0001 ==1 */ }
Java中的「或运算 | 」 规则 :有一个为1,则为1
- 即 :参加运算的两个对象只要有一个为1,其值为1。
例如:
复制代码
1
2
3
4
5
6
7
8
9
10
11public static void main(String args[]){ System.out.println(7 | 9); /* * 7二进制 0111 * 9二进制 1001 * ----------- * 1111 == 15 * */ }
Java中的「异或运算 ^ 」 规则 :都不同时,为1
- 即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
例如:
复制代码
1
2
3
4
5
6
7
8
9
10public static void main(String args[]){ System.out.println( 7 ^ 9); /* * 7二进制 0111 * 9二进制 1001 * ------------ * 1110 == 14 * */ }
Java中的「取反运算 ~ 」 规则 :按位取反
-
即:对一个二进制数按位取反,即将1变0,0变1。
-
按位取反运算符“~”的原理:是将内存中的补码按位取反(包括符号位)。
- 二进制数在内存中是以补码的形式存放的。
- 补码首位是符号位,0表示此数为正数,1表示此数为负数。
- 正数的补码、反码,都是其本身。
- 负数的反码是:符号位为1,其余各位求反,但末位不加1 。
- 负数的补码是:符号位不变,其余各位求反,末位加1 。
- 所有的取反操作、加1、减1操作,都在有效位进行。
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16- 例如:正数 - 正数9(二进制为:1001)在内存中存储为01001,必须补上符号位(开头的数字0为符号位)。 - 转二进制:0 1001 - 计算补码:0 1001 - 按位取反:1 0110 (变成补码,这明显变成了一个负数补码,因为符号位是1) - 补码减1 :1 0101 - 在取反 :1 1010 - 符号位为1是负数,即-10 - 例如:负数 - 负数-1(二进制为:0001)在内存中存储为10001,必须补上符号位(开头的数字1为符号位)。 - -1的反码为11110 - -1的补码为11111 (也可以理解为:反码末位加上1就是补码) - ~-1的取反 00000 - ~-1结果为:0
例1:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package test2; public class CeshiQuFan { public static void main(String args[]){ System.out.println(~7);//正数 /* * 7二进制 0000 0000 0000 0000 0000 0000 0000 0111 * 0000 0000 0000 0000 0000 0000 0000 0111 反码 * 0000 0000 0000 0000 0000 0000 0000 0111 补码 * 1000 0000 0000 0000 0000 0000 0000 1000 得到正数的补码之后进行取反 (这时得到的是负数)符号位为: 1 * 所以~7的值为:-8 */ } }
例2:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package test2; public class CeshiQuFan { public static void main(String args[]){ System.out.println(~-1);//负数 /* * -1二进制 1000 0000 0000 0000 0000 0000 0000 0001 * 1000 0000 0000 0000 0000 0000 0000 1110 反码(负数的反码是:符号位为1,其余各位求反,但末位不加1。) * 1000 0000 0000 0000 0000 0000 0000 1111 补码(负数的补码是:符号位不变,其余各位求反,末位加1 。) * 0000 0000 0000 0000 0000 0000 0000 0000 得到负数的补码之后进行取反 (这时得到的是正数) 符号位为: 0 * 所以~-1的值为:0 */ } }
文章处1
常用进制览表 ↩︎
最后
以上就是孝顺火车最近收集整理的关于Java中「与运算,或运算,异或运算,取反运算。」的全部内容,更多相关Java中「与运算内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复