gpt4 book ai didi

objective-c - 位移编码效率(即巧妙的技巧)

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:33 24 4
gpt4 key购买 nike

我正在开发一个 Objective-C 程序,我在其中通过网络获取位域,并且需要根据这些位设置 bool 变量。

目前我将位域表示为 int,然后使用位移,类似于此(所有自身属性都是 BOOL):

typedef enum {
deleteFlagIndex = 0,
uploadFlagIndex = 1,
moveFlagIndex = 2,
renameFlagIndex = 3
} PrivilegeFlagIndex;

int userFlag = 5; //for example

// this would be YES
self.delete = ((userFlag & (1 << deleteFlagIndex)) == (1 << deleteFlagIndex));
// this would be NO
self.upload = ((userFlag & (1 << uploadFlagIndex)) == (1 << uploadFlagIndex));

这很有效(据我所知),但我想知道 - 是否有更 高效 简洁的方法来使用花哨的技巧/技巧对所有的位旋转进行编码?我问是因为我要为 很多 旗帜(超过 30 个)做这个。

我确实意识到我也可以使用这个方法:

self.move = ((userFlag & (1 << moveFlagIndex)) > 0)

...这确实减少了打字量,但我不知道是否有充分的理由不这样做。

编辑:修改为简洁而不是高效 - 我并不担心执行性能,而是以智能方式执行此操作的技巧和最佳实践。

最佳答案

尝试:

typedef enum {
deleteFlag = 1 << 0,
uploadFlag = 1 << 1,
moveFlag = 1 << 2,
renameFlag = 1 << 3
} PrivilegeFlags;

现在您可以直接使用 | 组合它们。

通常,检查 0 就足够了:

if (userFlag & deleteFlag) {
// delete...
}

关于objective-c - 位移编码效率(即巧妙的技巧),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com