一个 int 值,只能表示一个数值吗?
source link: http://mp.weixin.qq.com/s?__biz=MzU3Mjc5NjAzMw%3D%3D&%3Bmid=2247486984&%3Bidx=1&%3Bsn=cd4eefa386050362f5d145e93f380ccf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
正常情况下一个 int 就是代表一个数值,或者一种状态。但是Google和Oracle的工程师似乎特别喜欢用1个 int 类型来表示多种状态,源码中到处都能看到这种使用方式。
线程池
ThreadPoolExecutor中的 ctl
定义线程池的运行状态值:
声明用来表示线程池运行状态和线程数量的变量
设置线程池状态和线程个数
获取线程池运行状态和线程个数
Java线程池使用AtomicInteger ctl表示线程池的两种状态:
-
运行时状态
-
当前池中线程个数
ctl 高3位表示运行时状态,低29位表示线程个数
Java Class 修饰符
getModifiers()
定义Class的几种修饰符值
获取Class所有的修饰符:
判断Class是否被某一个修饰符修饰:
Java Class 使用一个 int 变量 modifiers 的低16位来表示它的所有修饰符
Android View
MeasureSpec
定义状态UNSPECIFIED、EXACTLY、AT_MOST,以及用于过滤的MODE_MASK。
构建MeasureSpec
从MeasureSpec中取值
Android View中的onMeasure方法有2个参数:
-
int widthMeasureSpec
-
int heightMeasureSpec
这两个int的高2位表示宽高设置模式,低30位表示宽高实际大小
实践
相亲平台择偶标准
比如实现一个相亲平台,相亲人员需要登记自己的真实情况与择偶要求。主要包含两方面信息:城市地址(只限北上广) + 名下资产。
这种情况就可以用1个int类型的变量来表示这两方面信息:高2位表示城市地址,低30位表示名下资产。
1 定义城市地址状态值:
2 定义城市、资产过滤MASK:
3 构建城市地址与名下资产情况
4 判断 城市地址与名下资产情况 :
思考题
文末无广告
不知道为什么,文章写到这里我脑子里突然冒出一道题,可以借此题考验自己是否熟悉"位运算"?
如何使用"位运算"实现一个整数的正反数 ?比如:
-
输入 10,返回 -10
-
输入 -100,返回 100
-
输入 0,返回 0
如果你喜欢本文
长按二维码关注
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK