当前位置:  开发笔记 > 后端 > 正文

C中的按位索引?

如何解决《C中的按位索引?》经验,为你挑选了2个好方法。

我正在尝试实现我已经拥有的数据压缩思想,因为我想要在大量的测试数据库中运行它,我曾想过用C编写代码(我主要有像Ruby这样的脚本语言经验) TCL).

通过关于C的O'Reilly'牛'书,我意识到我不能简单地索引一个简单的'char'或'int'类型变量的位,因为我想做按位比较和运算符.

我对这种看法是否正确?使用枚举类型表示一个位(并创建这些数组,并编写函数转换为char和从char转换)是否合理?如果是这样,是否已在某个标准库中定义了这样的类型和函数?还有其他(更好的?)方法吗?是否有人可以指示我的某些示例代码?

谢谢 -



1> Mark Ingram..:

继凯尔所说的之后,你可以使用宏来为你做艰苦的工作.

有可能的.

要设置第n位,请使用OR:

x | =(1 << 5); //设置右起第6位

要清除一点,请使用AND:

x&=〜(1 << 5); //从第6位开始清除

要翻转一下,请使用XOR:

x ^ =(1 << 5); //翻转右下角

要么...

#define GetBit(var, bit) ((var & (1 << bit)) != 0) // Returns true / false if bit is set
#define SetBit(var, bit) (var |= (1 << bit))
#define FlipBit(var, bit) (var ^= (1 << bit))

然后你可以在代码中使用它:

int myVar = 0;
SetBit(myVar, 5);
if (GetBit(myVar, 5))
{
  // Do something
}



2> Kyle Cronin..:

有可能的.

要设置第n位,请使用OR:

x |= (1 << 5); // sets the 5th-from right

要清除一点,请使用AND:

x &= ~(1 << 5); // clears 5th-from-right

要翻转一下,请使用XOR:

x ^= (1 << 5); // flips 5th-from-right

要获得一点的值,请使用shift和AND:

(x & (1 << 5)) >> 5 // gets the value (0 or 1) of the 5th-from-right

注意:右移5是为了确保该值为0或1.如果您只对0 /非0感兴趣,则可以在没有移位的情况下完成.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有