小编Chu*_*uck的帖子

比特移位编码效率(即整齐的技巧)

我正在开发一个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)

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

编辑:修改为简洁而不是有效 - 我并不担心执行性能,而是以聪明的方式做这件事的技巧和最佳实践.

c bit-manipulation objective-c bit-shift

3
推荐指数
1
解决办法
1785
查看次数

标签 统计

bit-manipulation ×1

bit-shift ×1

c ×1

objective-c ×1