《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
最新文章
- python学习之day6,常用标准模块
- Oracle SqlDeveloper创建JOB
- 利用html5的画布canvas进行图片压缩处理
- 人人都是 DBA(IV)SQL Server 内存管理
- python 字符串查找
- Sharepoint 2010 创建栏 计算栏
- 翻译之basename()
- 【温故知新】c#事件event
- 【转】C#之继承
- C# 当double数值较大且小数位过多时转化成字符串并保留小数位
- 怎样通过css的media属性,适配不同分辨率的终端设备?
- HDU3853-LOOPS(概率DP求期望)
- Python3 常用数据类型语法
- 一次关于mongodb性能踩坑的总结
- insertBefore 和 insetAfter函数详解
- 我的摸索过程之IIS下配置asp.net 的注意事项
- [LeetCode]题100:Same Tree
- charCodeAt与fromCharCode
- SSD详解
- 论文笔记:Learning how to Active Learn: A Deep Reinforcement Learning Approach
热门文章
- LINQ -- 匿名类型
- win10安装mysql过程&;&;链接过程&;&;备份和导入数据&;&;grant命令
- Ternsorflow 学习:003-MNIST入门有关概念
- 动态代理,AOP和Spring
- Linux ---- 查看当前TCP连接数
- PE文件结构体-IMAGE_DATA_DIRECTORY
- XtraReport1添加参数
- Linux下如何查找sqlnet.ora 和listener.ora 和tnsnames.ora 配置文件的目录
- 049、Java中使用switch判断,不加入break时的操作
- 003、Java的单行注释