梦殇国际

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 刷粉
月光下载 云刷粉软件 云刷粉网页 水贴机电脑版 安卓软件 梦殇导航(教程集合) 有任何问题请点击提问
查看: 811|回复: 10
打印 上一主题 下一主题

[其他] 位运算

[复制链接]

9183

帖子

4382

积分

6922

TBS

吊炸天

UID
5
积分
4382
TBS
6922
智商
6445
节操
44176
海贝
627
阅读权限
200
在线时间
1976 小时
注册时间
2014-1-1
最后登录
2024-10-30

二逼青年

QQ
跳转到指定楼层
1
发表于 2014-5-15 20:47:31 爪机党 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搬运工→_→
首先要明白一个概念,Java位运算是针对于整型数据类型的二进制进行的移位操作。主要包括位与、位或、位非,有符号左移、有符号右移,无符号右移等等。需要注意一点的是,不存在无符号左移<<<运算符。根据位运算的概念规定,我们首先需要弄明白两个问题,java有哪些数据类型是整型数据类型和各数字进制之间转换问题。Java整型数据类型有:byte、char、short、int、long。要把它们转换成二进制的原码形式,必须明白他们各占几个字节。我们都知道,一个字节占8位。
数据类型 所占位数
byte 8
boolean 8
short 16
int 32
long 64
float 32
double 64
char 16
还需要明白一点的是:计算机表示数字正负不是用+ -加减号来表示,而是用最高位数字来表示,0表示正,1表示负
所以比如-4用二进制原码表示就是1111 1111 1111 1111 1111 1111 1111 1100
下面根据实例一个一个的来说明各种位运算的运算规则:
位与&(真真为真 真假为假 假假为假)
4&6
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 0100
结果:4
位或|(真真为真 真假为真 假假为假)
4|6
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 0110
结果:6
位非~(取反码)【注:Java中正数的最高位为0,负数最高位为1,即最高位决定正负符号】
~4
0000 0000 0000 0000 0000 0000 0000 0100
1111 1111 1111 1111 1111 1111 1111 1011
解码:先取反码,再补码
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
结果:-5
位异或^(真真为假 真假为真 假假为假)
4^6
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 0010
结果:2
有符号右移>>(若正数,高位补0,负数,高位补1)
-4>>2
1111 1111 1111 1111 1111 1111 1111 1100 原码
1111 1111 1111 1111 1111 1111 1111 1111 右移,最左边空出两位按规则负数空位补1
0000 0000 0000 0000 0000 0000 0000 0000 解码
0000 0000 0000 0000 0000 0000 0000 0001 补码(补码即最后一位+1)
结果:-1

有符号左移<<(若正数,高位补0,负数,高位补1)
-4<<2
1111 1111 1111 1111 1111 1111 1111 1100 原码
1111 1111 1111 1111 1111 1111 1111 0000 左移,最右边空出两位补0
0000 0000 0000 0000 0000 0000 0000 1111 解码
0000 0000 0000 0000 0000 0000 0001 0000 补码
结果:-16
无符号右移>>>(不论正负,高位均补0)
-4>>>2
1111 1111 1111 1111 1111 1111 1111 1100 原码
0011 1111 1111 1111 1111 1111 1111 1111 右移(由于高位均补0,故>>>后的结果一定是正数)
结果:1073741823
由于数据类型所占字节是有限的,而位移的大小却可以任意大小,所以可能存在位移后超过了该数据类型的表示范围,于是有了这样的规定:
如果为int数据类型,且位移位数大于32位,则首先把位移位数对32取模,不然位移超过总位数没意义的。所以4>>32与4>>0是等价的。
如果为long类型,且位移位数大于64位,则首先把位移位数对64取模,若没超过64位则不用对位数取模。
如果为byte、char、short,则会首先将他们扩充到32位,然后的规则就按照int类型来处理。
学到这里,我想你也可能会问,位运算到底有什么用途或者有哪些场景可以应用到它。因为位运算的运算效率比直接对数字进行加减乘除高很多,所以当出现以下情景且对运算效率要求较高时,可以考虑使用位运算。不过实际工作中,很少用到它,我也不知道为什么很少有人用它,我想应该是它比较晦涩难懂,如果用它来进行一些运算,估计编写的代码的可读性会不强,毕竟我们写的代码不仅仅留给自己一个人看。
1. 判断int型变量a是奇数还是偶数
a&1 = 0 偶数
a&1 = 1 奇数
2. 求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
(x&y)+((x^y)>>1);
3. 对于一个大于0的整数,判断它是不是2的几次方
((x&(x-1))==0)&&(x!=0);
4. 比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效
x ^= y;
y ^= x;
x ^= y;
5. 求绝对值
int abs( int x )
{
int y ;
y = x >> 31 ;
return (x^y)-y ; //or: (x+y)^y
}
6. 取模运算,采用位运算实现:
a % (2^n) 等价于 a & (2^n - 1)
7. 乘法运算 采用位运算实现
a * (2^n) 等价于 a << n
8. 除法运算转化成位运算
a / (2^n) 等价于 a>> n
9. 求相反数
(~x+1)
10 a % 2 等价于 a & 1
等等
当然还有牛人使用位运算来实现权限控制,加密技术,里面的奥秘深不可测啊!哈哈。
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复

使用道具 举报

3336

帖子

8382

积分

296

TBS

哈士奇~~~~~~

UID
8745
积分
8382
TBS
296
智商
1221
节操
2750
海贝
2
阅读权限
70
在线时间
112 小时
注册时间
2014-4-11
最后登录
2015-12-30
2
发表于 2014-5-15 20:49:28 | 只看该作者
。。。。。这都是什么玩意
回复 支持 反对

使用道具 举报

2151

帖子

1187

积分

1128

TBS

UID
5987
积分
1187
TBS
1128
智商
1393
节操
1619
海贝
62
阅读权限
50
在线时间
624 小时
注册时间
2014-2-27
最后登录
2019-12-9
3
发表于 2014-5-15 20:53:13 | 只看该作者
好厉害啊
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复

使用道具 举报

2571

帖子

2353

积分

134

TBS

这个是什么东西啊0.0

UID
9566
积分
2353
TBS
134
智商
1883
节操
1785
海贝
6
阅读权限
50
在线时间
102 小时
注册时间
2014-4-23
最后登录
2016-2-27
QQ
4
发表于 2014-5-15 20:55:35 | 只看该作者
我只知道java是用来玩我的世界的
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

<

12万

帖子

17万

积分

2万

TBS

♥有时温暖我们的恰恰 是那些素未谋面不怎么深知的网络中人♥

UID
211
积分
174512
TBS
25341
智商
26892
节操
37061
海贝
300
阅读权限
150
在线时间
7339 小时
注册时间
2014-1-2
最后登录
2024-7-24

二逼青年水货勋章榜上有名在线时间长签到达人

QQ
5
发表于 2014-5-15 20:58:48 | 只看该作者
挑战智商
只闻花香  不谈喜悲  喝茶读书  不争朝夕  做一个温暖的人
回复

使用道具 举报

872

帖子

0

积分

1038

TBS

UID
9153
积分
0
TBS
1038
智商
921
节操
892
海贝
0
阅读权限
0
在线时间
44 小时
注册时间
2014-4-17
最后登录
2015-8-7
6
发表于 2014-5-15 21:16:13 | 只看该作者
看不懂
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复

使用道具 举报

872

帖子

0

积分

1038

TBS

UID
9153
积分
0
TBS
1038
智商
921
节操
892
海贝
0
阅读权限
0
在线时间
44 小时
注册时间
2014-4-17
最后登录
2015-8-7
7
发表于 2014-5-15 21:30:11 | 只看该作者
你在水经验

评分

参与人数 1TBS -1 收起 理由
花哥 -1 妹纸下次注意不要这样

查看全部评分

全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

872

帖子

0

积分

1038

TBS

UID
9153
积分
0
TBS
1038
智商
921
节操
892
海贝
0
阅读权限
0
在线时间
44 小时
注册时间
2014-4-17
最后登录
2015-8-7
8
发表于 2014-5-15 21:30:36 | 只看该作者
亲  晚安了

点评

@花哥 见过屌的,没见过这么屌的。 自己在刷楼就说别人水经验  详情 回复 发表于 2014-5-15 22:31
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

9183

帖子

4382

积分

6922

TBS

吊炸天

UID
5
积分
4382
TBS
6922
智商
6445
节操
44176
海贝
627
阅读权限
200
在线时间
1976 小时
注册时间
2014-1-1
最后登录
2024-10-30

二逼青年

QQ
9
 楼主| 发表于 2014-5-15 22:31:33 爪机党 | 只看该作者
小熙丶GG丶 发表于 2014-5-15 21:30
亲  晚安了

@花哥 见过屌的,没见过这么屌的。
自己在shua楼就说别人水经验

点评

蒽,辛苦了  详情 回复 发表于 2014-5-15 22:51
全站禁止灌水,后果自负 月光爆吧器 积分充值 签名档设置 积分记录 新人必备
梦殇qq群 欢迎加入群内禁止传播黄色信息!
①群:515706814 爆吧□顶贴□机器 ②群:94025161 贴吧推广□爆吧□软件 ③群:549343908 营销推广□贴吧□软件
回复 支持 反对

使用道具 举报

3万

帖子

5万

积分

765

TBS

花叶永不见唯有心灵犀

UID
25
积分
52938
TBS
765
智商
16326
节操
16021
海贝
206
阅读权限
180
在线时间
6294 小时
注册时间
2014-1-1
最后登录
2024-7-28

屌丝认证二逼青年水货勋章内涵帝榜上有名在线时间长签到达人资源达人爱心大使优秀版主

10
发表于 2014-5-15 22:51:42 | 只看该作者
小B 发表于 2014-5-15 22:31
@花哥 见过屌的,没见过这么屌的。
自己在shua楼就说别人水经验

蒽,辛苦了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-11-16 04:03,Processed in 0.041702 second(s), 37 queries.

Powered by Discuz!X3.4© 2001-2013 Comsenz Inc. 手机版|黑名单|站点地图|RGB转16进制|梦殇国际 MSI

贴吧交流群:172119290 | 编程交流群:232677917 | 官方YY频道:13234704 | 本站所有软件仅供学习交流使用!

工信部备案:赣ICP备14004172号-1 | 如有需要请联系 邮箱:541641237#qq.com (点击发邮件)

快速回复 返回顶部 返回列表