Java中「与运算,或运算,异或运算,取反运算。」
原创2022年7月8日大约 4 分钟...约 1150 字
Java 中的「与运算 & 」 规则 :都为 1 时才为 1,否则为 0
- 即:两位同时为 “1”,结果才为 “1”,否则为 0
例如:
public 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。
例如:
public static void main(String args[]){
System.out.println(7 | 9);
/*
* 7二进制 0111
* 9二进制 1001
* -----------
* 1111 == 15
* */
}
Java 中的「异或运算 ^ 」 规则 :都不同时,为 1
- 即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为 1,否则为 0。
例如:
public 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 操作,都在有效位进行。
例如:正数
- 正数 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:
package 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:
package 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
*/
}
}
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
你认为这篇文章怎么样?
- 0
- 0
- 0
- 0
- 0
- 0