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

正常情况下一个 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

如果你喜欢本文

长按二维码关注

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: DS18B20 是一种常用的数字温度传感器,它具有高精度和长距离传输等特点。在使用 DS18B20 时,通常需要编写一个驱动来控制传感器的读取和处理。 以下是一个简单的 DS18B20 驱动示例,使用 Python 语言,需要用到 w1thermsensor 库: ```python import w1thermsensor # 枚举所有可用的 DS18B20 传感器 sensors = w1thermsensor.W1ThermSensor.get_available_sensors() # 读取第一个传感器的温度 sensor = sensors[0] temperature = sensor.get_temperature() print(temperature) ``` 这个例子会在控制台输出检测到的第一个DS18B20的温度。你可以根据实际需要调整代码,输出多个传感器的温度,存储传感器数据等. 注意, 这个驱动只能在linux下运行, windows的话需要相应的库来支持. ### 回答2: DS18b20是一款数字温度传感器,它基于1-Wire总线通信协议。下面是一个简单的DS18b20驱动的实现: 首先,我们需要引入相应的库文件。使用C语言编写该驱动,我们需要包含头文件,并且在程序中初始化1-Wire总线。 ```c #include <stdio.h> #include <wiringPi.h> #include <wiringPiDS18B20.h> ``` 接下来,我们需要初始化DS18b20驱动,并获取传感器的地址: ```c int main() { int sensorPin = 7; // 传感器数据线连接的GPIO引脚 int result; wiringPiSetup(); // 初始化wiringPi库 wiringPiSetupSys(); result = ds18b20Setup(sensorPin); // 初始化DS18b20驱动 if (result <= 0) { printf("Failed to setup DS18b20!\n"); return 1; } printf("DS18b20 sensor address: %X\n", ds18b20Devices[0].address); // 打印传感器地址 while (1) { float temperature; temperature = ds18b20ReadTemperature(sensorPin); // 读取温度 // 打印温度 printf("Temperature: %0.2f°C\n", temperature); delay(1000); // 延时1秒 } return 0; } ``` 在上述代码中,我们首先初始化了wiringPi库和1-Wire总线。然后,使用`ds18b20Setup()`函数初始化DS18b20驱动,并返回表示成功初始化的传感器数量。我们可以通过`ds18b20Devices[0].address`来获取传感器的地址。 接下来,程序进入一个无限循环,在循环中通过`ds18b20ReadTemperature()`函数读取温度数值,并使用`printf()`函数打印出来。最后,通过`delay()`函数延时1秒,然后再次读取温度。 这就是一个简单的DS18b20温度传感器驱动的实现。当然,根据实际需求和具体的平台,该驱动可以进行更多的功能扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值