Java:二进制(原码、反码、补码)与位运算
一、二进制(原码、反码、补码)
- 二进制的最高位是符号位(“0”代表正数,“1”代表负数);
- Java中没有无符号数;
- 计算机以整数的补码进行运算;
1. 原码:将一个整数转换成二进制表示
以 int 类型为例,int类型占4个字节、共32位。
例如,2 的原码为:0000000 00000000 00000000 00000010
-2的原码为:0000000 00000000 00000000 00000010
2. 反码
正数的反码:与原码相同
负数的反码:原码的符号位不变,其他位取反
例如,-2 的反码为:1111111 11111111 11111111 11111101
3. 补码
正数的补码:与原码相同
负数的补码:反码+1
例如,-2 的补码为:1111111 11111111 11111111 11111110
二、位运算
Java中有4个位运算符:
1. 按位与 &:两位都为1,结果为1
例如,2&3 = 2
2 的原码为: 00000000 00000000 00000000 00000010
3 的原码为: 00000000 00000000 00000000 00000011
2&3 原码为: 00000000 00000000 00000000 00000010 = 2
2. 按位或 |:至少一位为1,结果为1
例如,2|3 = 3
2 的原码为: 00000000 00000000 00000000 00000010
3 的原码为: 00000000 00000000 00000000 00000011
2|3 原码为: 00000000 00000000 00000000 00000011 = 3
3. 按位异或 ^:两位一个为1、一个为0,结果为1
例如,2|3 = 3
2 的原码为: 00000000 00000000 00000000 00000010
3 的原码为: 00000000 00000000 00000000 00000011
2^3 原码为: 00000000 00000000 00000000 00000001 = 1
4. 按位取反 ~:0变成1、1变成0
例如,~2 = -3
对2的原码取反:11111111 11111111 11111111 11111101 (取反后结果的补码,也就是-3的补码。我们需要从补码推出原码,才能得到-3)
转换成反码: 11111111 11111111 11111111 11111100 (补码减1)
转换成原码: 0000000 00000000 00000000 00000011 =-3 (符号为不变,其他位取反)
总结
- 正数的原码、反码、补码都一样;
- 负数的反码 = 原码的符号位不变,其他位取反;
- 负数的补码 = 反码+1;
- 0的原码、反码、补码都是0;
- 计算机以补码进行运算;
- 取反不同于反码;
2018-01-06 18:38:29
Java:二进制(原码、反码、补码)与位运算的更多相关文章
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- java原码反码补码以及位运算
原码, 反码, 补码的基础概念和计算方法. 对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式. 1. 原码 原码就是符号位加上真值的绝对值, 即 ...
- C语言原码反码补码与位运算.
目录: 一.机器数和真值 二.原码,反码和补码的基础概念 三.为什么要使用原码,反码和补码 四.原码,补码,反码再深入 五.数据溢出测试 六.位运算 ...
- 「C语言」原码反码补码与位运算
尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解. 本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出. 目录 ...
- Java基础-原码反码补码
Java基础-原码反码补码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 注意,我们这里举列的原码和反码只是为了求负数的补码,在计算机中没有原码,反码的存在,只有补码. 一.原码 ...
- 位移&二进制转换&原码&反码&补码
<< 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...
- Java 原码 反码 补码
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- java基础知识-原码,反码,补码
1.正数:原码,反码,补码:都一样. 2.负数:和正数的储存方式不同,负数都是以补码形式存储的. <1>负数的补码 把负数的原码除了符号位取反后再+1. <2>负数的原码 把对 ...
- 原码 & 反码 & 补码 & 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
随机推荐
- AWESOME SWIFT-swift.libhunt.com-swift类库网站
https://swift.libhunt.com/categories/688-events 29 Events libraries and projects ORDERED BY POPULARI ...
- FBKVOController代码阅读
功能:对kvo机制进行封装,简化使用,简化内存管理: 要素:观察者.被观察者.处理函数. 模式:注册表模式: 机制:对象创建.注册管理.内存管理.处理机制转换: 其它:注册去重: kvo的管理机制:
- 实现websocket
转:http://www.cnblogs.com/dolphinX/p/3462898.html 在之前的博客中提到过看到html5 的websocket后很感兴趣,终于可以摆脱长轮询(websock ...
- jquery ajax 标准写法
$.ajax({ url:"http://www.microsoft.com", //请求的url地址 dataType:"json", //返回格式为json ...
- Linux学习总结(十)-文件复制及查看, 环境变量
一 文件复制及移动 1.命令 cp --------copy 的意思格式 cp 选项 源文件 目标文件a: 对于文件我们直接cp 文件 目标文件假定我们在普通用户家目录下/home/lv新建两个普通文 ...
- ASP.NET Web API编程——使用自签名SSL证书
1自签名SSL证书的创建 创建自签名SSL工具xca为:https://sourceforge.net/projects/xca/ 创建过程 1)创建根证书 打开软件,界面如下. 点击,看到下拉菜单, ...
- 理解基本包装类型Number,String,Boolean
在前面我们知道了引用类型是什么了,也就能理解包装类型了.包装对象其实也是一种引用类型,之所以要单独提出来只不过是因为它们可以把原始类型的值变成(包装成)对象,这样它们也就获得了各自类型相应的特殊行为了 ...
- java并发编程之CompletionService
应用场景当向Executor提交多个任务并且希望获得它们在完成之后的结果,如果用FutureTask,可以循环获取task,并调用get方法去获取task执行结果,但是如果task还未完成,获取结果的 ...
- 图形解析理解 css3 之倾斜属性skew()
1.作用 改变元素在页面中的形状2.语法 属性:transform 函数: 1.skew(xdeg) 向横向倾斜指定度数 x取值为正,X轴不动,y轴逆时针倾斜一定角度 x取值为负,X轴不动,y轴顺时针 ...
- Swiper2和Swiper3区别详解与兼容IE8/IE9
最近项目一些网站项目想到用Swiper3来制作响应式,但是发现IE9都不兼容, 而swiper2版本又少一个breakpoints参数 做响应式脚本非常不方便,于是想到新版的浏览器用3 ,iE9和以 ...