首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在收到匹配的int标志时才更新某些值。

只有在收到匹配的int标志时才更新某些值。
EN

Stack Overflow用户
提问于 2020-04-13 10:36:10
回答 1查看 106关注 0票数 0

我有一个object类,它告诉我数据的类型已经改变了。

代码语言:javascript
复制
object Part {
    const val CONTRAST      = 0x00000001
    const val SATURATION    = 0x00000010
    const val PIXELATION    = 0x00000100
    const val SHARPNESS     = 0x00001000
    const val BRIGHTNESS    = 0x00010000
    const val ALL           = 0x11111111
}

在我的使用方法中,我检查数据的Part发生了什么变化。并且,只更新匹配的数据。

代码语言:javascript
复制
fun applyUpdate(flag: Int, percentage: Int) {

    if (flag and Part.CONTRAST == flag) {
        applyContrastUpdate(percentage)
    }

    if (flag and Part.SATURATION == flag) {
        applySaturationUpdate(percentage)
    }

    .
    .
}

// applyUpdate(Part.CONTRAST, 60)    --> only contrast is updated.
// applyUpdate(Part.SATURATION, 30)  --> only saturation is updated.
// applyUpdate{Part.ALL, 0}.         --> all values are updated.

我所理解的是0x0001 and 0x0001 = 0x0001 =对比。

但是,如果我定义了一个新的Part,比如说DISTORTION = 0x0011,那么失真的变化也会改变对比。

例如0x0011 and 0x0001 = 0x0001 =对比

使用这段代码,我可以定义最多8个Part。正确地放置1。对吗?如果我有36个Part,如何保持这个功能正常工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 14:00:21

EnumSets可能不像位标志那么容易出错。这是一个意见问题,但我认为,对于位标志,语法更容易使用。这样的位标志可以用于优化。在Android系统中,设计者非常反感,所以在平台代码中不使用enum。

如果你带着旗子去:

如果使用Long而不是Int,则最多可以有31个标志,而不是8个。或者63个标志。(不是32和64,因为第一个位用于符号。)您已经使用十六进制而不是二进制定义了您的常量,并且只使用了每个十六进制数字的一个可能值,所以您只使用了四分之一的可用位。

您可以使用每一位数的加倍值来定义它们,最多可达8:

代码语言:javascript
复制
object Part {
    const val CONTRAST      = 0x00000001
    const val SATURATION    = 0x00000002
    const val PIXELATION    = 0x00000004
    const val SHARPNESS     = 0x00000008
    const val BRIGHTNESS    = 0x00000010
    const val SOMETHING     = 0x00000020
    const val ALL           = 0x0000003F
}

当您检查flag and Part.CONTRAST == flag时,您正在检查该标志是否只打开了CONTRAST。如果您想检查标志是否仅包含CONTRAST,您可以检查flag and Part.CONTRAST == Part.CONTRAST,或者更简洁地说:flag and Part.CONTRAST != 0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61186038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档