Chu*_*uck 3 c bit-manipulation objective-c bit-shift
我正在开发一个Objective-C程序,我正在通过网络获取位域,并且需要根据这些位设置布尔变量.
目前我将位域表示为int's,然后使用位移,类似于此(所有自身属性都是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));
Run Code Online (Sandbox Code Playgroud)
这是有效的(据我所知),但我想知道 - 是否有一种更有效的简洁方法来编写所有使用花哨技巧/黑客的位?我问,因为我会为很多标志(超过30个)做这个.
我意识到我也可以使用这种方法:
self.move = ((userFlag & (1 << moveFlagIndex)) > 0)
Run Code Online (Sandbox Code Playgroud)
...这确实减少了打字的数量,但我不知道是否有充分的理由不这样做.
编辑:修改为简洁而不是有效 - 我并不担心执行性能,而是以聪明的方式做这件事的技巧和最佳实践.
Rud*_*uis 11
尝试:
typedef enum {
deleteFlag = 1 << 0,
uploadFlag = 1 << 1,
moveFlag = 1 << 2,
renameFlag = 1 << 3
} PrivilegeFlags;
Run Code Online (Sandbox Code Playgroud)
现在您可以|直接使用它们.
通常,只需检查0即可:
if (userFlag & deleteFlag) {
// delete...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1785 次 |
| 最近记录: |