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
*/
}
}
Java中「与运算,或运算,异或运算,取反运算。」的更多相关文章
- Java中byte转换int时与0xff进行与运算的原因
http://w.baike.com/LGAdcWgJBBQxRAHUf.html 转帖 java中byte转换int时为何与0xff进行与运算 在剖析该问题前请看如下代码 public static ...
- java中a++和++a在较复杂的运算中分析
关于连加和连减:http://blog.csdn.net/ieayoio/article/details/46431843 以下是一段普遍都了解的代码: public static void main ...
- JAVA中整型的存储和左右移位运算
byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...
- bis和bic命令实现或和异或运算
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...
- java :: Java中的双冒号操作符
java中的双冒号操作符 定义 双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion. 通常的情况下: 把 x -& ...
- java中符号类型和无符号类型的问题分析
一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中 ...
- Java中int和short的转化
例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...
- Java中short和int的转换
例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...
- Java中math类的常用函数
Java中math类的常用函数 在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数.对数.平方根和三角函数等 只要在源文件的顶部加上下面这行代码就不必在数学方法名和常量名 ...
随机推荐
- EFI/UEFI BIOS 入门
我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS是整个计算机系统中最重要的底层系统软件 ...
- Windows Server 2012R2 / 2008R2 修改密码策略(password policy)
一. 针对于未添加到域中的机器 cmd中执行gpedit.msc 打开Local Group Policy Editor查看password policy设置,修改对应的password polic ...
- selenium爬虫使用
1. 网页的打开 from selenium import webdriver import time driver = webdriver.Chrome(executable_path=r" ...
- RzPageControl(pagecontrol)实现多标签的动态添加,切换,关闭
https://blog.csdn.net/pdw2009/article/details/76157651 使用RzPageControl来实现多标签页使用菜单来打开标签页,通过标签页的captio ...
- 作为web开发人员,你必须要知道的问题! (持续更新)
GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=val ...
- 性能测试的 Check List (不断更新中)
1. 开发人员是否提交了测试申请?2. 测试对象是否已经明确?3. 测试范围是否已经明确?4. 本次不被测试的范围是否已经明确?5. 测试目标是否已经明确?6. 何时开始性能测试?7. 何时终止一轮性 ...
- 用泛型方法Java从实体中提取属性值,以及在泛型方法中的使用
public <T> T getFieldValue(Object target, String fieldName, Class<T> typeName) { try { O ...
- MySQL使用order by field()自定义排序
MySQL的自定义排序和Oracle相比,要简单得多. 假设在表v_education的列schoolRecord中,有以下字段:'小学','初中','高中','专科','本科','硕士','博士'. ...
- 使用shiro遇到的问题
Caused by: java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException 解决问题:缺少一个依赖的缓存jar 添加: <d ...
- [转] An In-Depth Look at the HBase Architecture - HBase架构深度剖析
[From] https://mapr.com/blog/in-depth-look-hbase-architecture/ In this blog post, I’ll give you an i ...