没有合适的资源?快使用搜索试试~ 我知道了~
什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110 AND 1011 ———- 0010 –> 2 由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。当然有人会说,这个快了有什么用,计算6 and 11没有什么实际意义啊。这一系列的文章
资源推荐
资源详情
资源评论
Kotlin基础学习之位运算基础学习之位运算
什么是位运算?什么是位运算?
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。
比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是
1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理):
110
AND 1011
———-
0010 –> 2
由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。当然有人会说,这个快了有什么用,计算6
and 11没有什么实际意义啊。这一系列的文章就将告诉你,位运算到底可以干什么,有些什么经典应用,以及如何用位运算
优化你的程序。
引言引言
这个还真是基础中的基础,如果你跟我一样之前没有好好学习过Java基础语法,这块对你来说应该是一个懵逼点吧。不谈底
层什么的,单单从android编程来看,我们在加密算法还有网络包处理等业务上使用位运算的频率还是很高的,更别提Intent中
的那些种类繁多的Flag了,因此学好这方面的基础知识还是很重要的
本系列的例子使用的是Kotlin的语法,跟Java相比还是有所区别,请对照参考
无符号和有符号无符号和有符号
在计算机中,可以区分正负的类型称为有符号类型,没有正负类型的称为无符号类型。
一个字节为8位,从0开始算,那它的最高位就是第7位。同样2个字节最高位为第15位,4个字节最高位为第31位。不同长度
的类型,最高位不同,但是都是最左边的那个。
无符号数中,所有的位都用于直接表示该值的大小;有符号数中最高位用于表示正负,0表示正数,1表示负数。因此同样一
个字节,无符号数最大值为255,有符号数最大值为127。有符号数最大值计算完全跟无符号数一样,但是在负数范围内就不
能用刚才那种计算方式了,在计算机中,负数除了最高位为1以外,还采用补码的形式,所以在计算中要对补码进行还原
值得注意:值得注意:的是JAVA的原始类型里没有无符号整型,如果需要转成无符号类型,可以用ushr
原码、补码、反码原码、补码、反码
这个是高中就教过的知识,这里就不再做介绍
提醒一下,负数都是用补码参与运算的,得到的也是补码,需要减1取反获得原码。
位运算符位运算符
位运算主要在直接操控二进制数时进行使用,可以达到节约内存,使你的程序运行速度更快
Java定义了位运算符,可应用在整形(int)、长整型(long)、短整型(short)以及字符型(byte)等类型上。位运算符作用在所有的位
上,并按位进行运算。Kotlin与之略有不同,它并没有提供特殊的操作符,只提供了中缀形式的表示方法,并且Kotlin只可用在
Int和Long类型上,这点千万要记住
咱们来看一个例子
val a1 = 60
val b1 = 13
var c1 = -5
// 与
println(a1 and b1)
// 或
println(a1 or b1)
// 异或
println(a1 xor b1)
// 按位取反
println(a1.inv())
// 左移
println(a1.shl(1))
// 右移
println(a1.shr(1))
// 无符号右移
println(a1.ushr(1))
资源评论
weixin_38582793
- 粉丝: 6
- 资源: 888
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功