《Thinking in Java》位运算
按位操作符:
首先先记住一件事,方便理解:是否对应正负对应10.
1.与(&):11得1,10得0,00得0.
2.或(|):11得1,10得1,00得0.
3.异或(^):11得0,10得1,00得0(相同为0,不同为1).
4.非(~):这是一元运算符,上面3个是2元运算符,0得1,1得0(取反)。
移位操作符:
记住:移位操作符左边的是整数类型(int)的被操作数,右边是要移动的位数。
1.左位移操作符(<<):能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0,低位是右边,高位是左边)
2.“有符号”右移位操作符(>>):按照操作符右侧指定的位数将操作符左边的操作数向右移动(“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号位负,则在高位插入1)。
3.“无符号”右移位操作符(>>>):它使用“零扩展”:无论正负,都在高位插入0.
4.左移操作符只有那么一种,不和右移位操作符一样。
负数位运算:
记住:int类型是8字节,32位的,高位的0是不显示的。而且最高位的1或者0代表的是正或者负,所以int类型表示的范围是:2的31次方-1至负的2的31次方(最高位是符号,所以只有31位代表数字,又因为正数里面有个0,所以是2的31次方要减1)。
一个正整数的位运算就是按二进制转为32位的源码,高位的0不显示(Integer.toBinaryString(数字))
以下代码以-6为例子,Integer.toBinaryString(-6)输出之后是(11111111 11111111 11111111 11111010)
Integer.toBinaryString(6) = 110;
1.转为源码:负数最高位为1,其他按其绝对值取(10000000 00000000 00000000 00000110)
2.反码:最高位不变,其他位取反(11111111 11111111 11111111 11111001).
3.补码:给反码进行+1操作(11111111 11111111 11111111 11111010)说明:最后的001代表的是1,1+1=2,所以最后三位应该是为2,2转为二进制是010
重新转为10进制,只需按相反操作就行了:
1.补码-1变反码
2.反码:最高位不变,其他位取反变成源码
3:源码按二进制转十进制计算
即使是对负数进行位移操作,也只是在补码变反码之间加一个步骤,将补码位移变成新补码,再用新补码-1变反码
负数位运算资料来源:https://blog.csdn.net/weixin_37322501/article/details/85759105
《Thinking in Java》位运算的更多相关文章
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java位运算原理及使用讲解
前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...
- (转)java位运算
转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非) public class Test { public static ...
- Java位运算总结:位运算用途广泛
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- 我们必须要了解的Java位运算(不仅限于Java)
本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...
- Java位运算经典实例
一 源码.反码.补码 正数的源码.反码.补码相同,例如5: 5的源码:101 5的反码:101 5的补码:101 负数的源码.反码.补 ...
- Java 位运算(移位、位与、或、异或、非)
Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
- java位运算
Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << ...
随机推荐
- JMeter-响应断言设置
针对如上请求,可以设置3种相应断言: 1. 2. 3.
- main方法
main函数的分析(python) 对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C ...
- CVE-2019-0708—微软RDP远程桌面代码执行漏洞复现
0x01 2019年9月7日凌晨,msf上更新了0708的漏洞利用程序. 顿时安全群和朋友圈就爆炸了 - 奈何接到HW攻击队任务,又在家过了个中秋,0708才在今天更新. 0x02 环境 Window ...
- chromedriver版本问题
最新的chromedriver 66.0.3359.117 的对应chromedriver版本为2.38 http://npm.taobao.org/mirrors/chromedriver/ Web ...
- 利用 Ruoyi 开发自己的业务管理系统__测试结构完成
前言铺垫不多说 (1)Ruoyi这个平台不错:如果你觉得你比Ruoyi的作者牛逼,你就不用看我这个文章了,你可以走了,因为我自认为比Ruoyi的作者要烂: (2)必须已经成功搭建Ruoyi,并能在自己 ...
- 《新标准C++程序设计》4.7-4.9(C++学习笔记17)
一.重载类型强制转换运算符 在C++中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符.类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过 ...
- 0104 gradle入门
背景 gradle的官网是 www.gradle.org,标题介绍是: accelerate developer productivity,翻译过来:提高开发者的生产率: 简要介绍:从手机app到微服 ...
- makecert 制作数字证书 给DLL加一个数字签名
声明:文章整理自互联网 我仅需要给dll添加(替换)一个签名,所以我只看了第一步和第三步,其余的部分我没有测试,不能保证内容的是否正确. 看了很多关于DLL加签名的教程 大多是错误的 完全无法正常走下 ...
- 使用Python的PIL库做的图像相似度对比源码备份
#!/usr/bin/python # Filename: histsimilar.py # -*- coding: utf-8 -*- import PIL.Image def make_regal ...
- 小程序地图开发周边信息POI展示为列表
##首先附上效果图 在我前面的文章中我详述过如何使用百度地图API来开发小程序的地图,所以这里面就不说基础内容了. 直说如下: ##1.如何获取列表: //分类存储 makertap: functio ...