9

一个 int 值,只能表示一个数值吗?

 3 years ago
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.

f2MnAnA.jpg!web

正常情况下一个 int 就是代表一个数值,或者一种状态。但是Google和Oracle的工程师似乎特别喜欢用1个 int 类型来表示多种状态,源码中到处都能看到这种使用方式。

线程池

ThreadPoolExecutor中的  ctl

定义线程池的运行状态值:

RBZrI3E.png!web

声明用来表示线程池运行状态和线程数量的变量

RF3muqV.png!web

设置线程池状态和线程个数

u6v2uqA.png!web

获取线程池运行状态和线程个数

vQr6Vnn.png!web

Java线程池使用AtomicInteger ctl表示线程池的两种状态:

  • 运行时状态

  • 当前池中线程个数

ctl 高3位表示运行时状态,低29位表示线程个数

Java Class 修饰符

getModifiers()

定义Class的几种修饰符值

iYby2uV.png!web

获取Class所有的修饰符:

Uf22uqu.png!web

判断Class是否被某一个修饰符修饰:

ZrERj2f.png!web

Java Class 使用一个 int 变量 modifiers 的低16位来表示它的所有修饰符

Android View

MeasureSpec

定义状态UNSPECIFIED、EXACTLY、AT_MOST,以及用于过滤的MODE_MASK。

AfauEnM.png!web

构建MeasureSpec

vyYbMjI.png!web

从MeasureSpec中取值

zAfMnqf.png!web

Android View中的onMeasure方法有2个参数:

  • int widthMeasureSpec

  • int heightMeasureSpec

这两个int的高2位表示宽高设置模式,低30位表示宽高实际大小

实践

相亲平台择偶标准

比如实现一个相亲平台,相亲人员需要登记自己的真实情况与择偶要求。主要包含两方面信息:城市地址(只限北上广) + 名下资产。

这种情况就可以用1个int类型的变量来表示这两方面信息:高2位表示城市地址,低30位表示名下资产。

1 定义城市地址状态值:

B7ruEbe.png!web

定义城市、资产过滤MASK:

BNv6biy.png!web

3 构建城市地址与名下资产情况

eq2QVna.png!web

4 判断 城市地址与名下资产情况

maI3E3n.png!web

思考题

文末无广告

不知道为什么,文章写到这里我脑子里突然冒出一道题,可以借此题考验自己是否熟悉"位运算"?

如何使用"位运算"实现一个整数的正反数 ?比如:

  • 输入 10,返回 -10

  • 输入 -100,返回 100

  • 输入 0,返回 0

如果你喜欢本文

长按二维码关注

6vuYzeI.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK