Java中「与运算,或运算,异或运算,取反运算。…
2019-11-15 16:03:49来源:博客园 阅读 ()
Java中「与运算,或运算,异或运算,取反运算。」
版权声明一:本文为博主原创文章,转载请附上原文出处链接和本声明。
版权声明二:本网站的所有作品会及时更新,欢迎大家阅读后发表评论,以利作品的完善。
版权声明三:对不遵守本声明或其他违法、恶意使用本网内容者,保留追究其法律责任的权利。
本文链接:https://home.cnblogs.com/u/zak24/
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
*/
}
}
原文链接:https://www.cnblogs.com/zak24/p/11864326.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash