博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java左移运算符, 右移运算符, 无符号右移
阅读量:7235 次
发布时间:2019-06-29

本文共 836 字,大约阅读时间需要 2 分钟。

hot3.png

吐槽一下osc的markdown编辑器, 发布后的效果简直惨不忍睹.

下面如果看的凌乱, 来这里看吧.

简介

Java中有左移运算符(<<), 右移运算符(>>) 和 无符号右移运算符(>>>),

用它们来进行运算, 比用 乘法运算符(*), 除法运算符(/)拥有更高的执行效率.
那么如何来用它们进行运算呢?

先说结论

a >> 1 == a / 2;a >> 2 == a / 2 / 2;a >> 3 == a / 2 / 2 / 2;a << 1 == a * 2;a << 2 == a * 2 * 2;a << 3 == a * 2 * 2 * 2;

右移推导过程

int a = 64; a >> 2;

a 的二进制表示形式: 0100 0000
右移两位: --0100 0000
高位(左边)补零, 低位(右边)丢弃: 0001 0000
转为十进制: 16

左移推导过程

int b = 3; b << 2;

b 的二进制表示形式: 0000 0011
左移两位: 0000 0011--
高位(左边)丢弃, 低位(右边)补零: 0000 1100
转为十进制: 12

对于负数的左移, 右移

负数的左移, 右移, 和上面的推导过程唯一的区别就是: 正数补零, 负数补一

int c = -64; a >> 2;
c 的二进制表示形式: 1100 0000
右移两位: --1100 0000
高位(左边)补, 低位(右边)丢弃: 1111 0000
转为十进制: -16

无符号右移(>>>)

对于正数, (>>>) 效果等同于 (>>)

对于负数, 我们对二进制数据做位移的时候, 需要把二进制数据的宽度转换为32位或64位宽度

十进制和二进制转换

关于32位宽度和64位宽度

如何得到负数的32位宽度, 或64位宽度呢?

参考

. 这里是列表文本

转载于:https://my.oschina.net/ironwill/blog/1589635

你可能感兴趣的文章
iOS - SQLite 数据库存储
查看>>
线程、任务和同步学习笔记(五)
查看>>
远程控制之登录界面设计
查看>>
objc/runtime.h 查看私有api
查看>>
Linux下执行jmeter脚本
查看>>
java笔记之分支、循环语句
查看>>
我的Ajax学习笔记
查看>>
Struts2遇到Caused by Action class not found这类问题怎么解决
查看>>
ViewPager实现滑动翻页效果
查看>>
自定义HorizontalScrollView的scrollBar
查看>>
轻量高效的开源JavaScript插件和库
查看>>
CSS3-background-clip+background-origin
查看>>
linux yum 安装mysql
查看>>
种下一棵树:有旋Treap
查看>>
设计模式——(Abstract Factory)抽象工厂“改正为简单工厂”
查看>>
图灵热点之阅读篇——七月图书推荐
查看>>
【转载】acedSSGet()函数用法详解
查看>>
bzoj5407: girls
查看>>
BootStrap selectpicker后台动态绑定数据
查看>>
【转】正则基础之——贪婪与非贪婪模式
查看>>