Tag: 位操作

简单的ASCII压缩 – 帮助最小化系统调用

在我的上一个问题中 ,nos提供了一种从ASCII字符字节中删除最重要位的方法,这与我教授在描述项目时所说的完全一致。 我的问题是如何剥离有效位并使用write命令将其打包到缓冲区中。 由于write命令占用了要写入的字节数的长度,因此如何更深入地处理缓冲区数组的位级别?

在int的每个半字节中切换位

如何仅使用位操作(无控制结构)将每个半字节的第0位和第3位切换为整数? 为了解决这个问题,我需要创建什么样的面具? 任何帮助,将不胜感激。 例如,8(1000)变为1(0001)。 /* * SwitchBits(0) = 0 * SwitchBits(8) = 1 * SwitchBits(0x812) = 0x182 * SwitchBits(0x12345678) = 0x82a4c6e1 * Legal Operations: ! ~ & ^ | + <> */ int SwitchBits(int n) { }

循环通过位C

我试图遍历无符号字符的位,但我不知道从哪里开始,最终,我将对这些位执行其他按位操作,例如〜和xor..etc。

仅使用按位运算在C中实现更大的等号

我知道许多基本操作(如加法或除法)也可以仅使用按位运算符在C中实现。 如何使用大于或等号(> =)来做同样的事情? if (x >= 0) { … }

使用按位和bitshift转换为二进制

我正在尝试使用按位和位移创建一个以二进制打印数字的函数,但是我无法正确打印它。 以下是我的代码。 void PrintInBinary( unsigned int decNum ) { int i = 0; unsigned int highestOne = 1 << (sizeof(unsigned int)*8 – 1); for( i = 0; i > i) ); } printf(“\n”); } int main() { unsigned int a = 128; PrintInBinary( a ); system(“PAUSE”); return 0; } 以下是输出: 0000000000000000000000001280000000 基本上,它打印2 ^位而不是每个位位置只有1(例如,如果我想将7转换为二进制,则它将是0000000 … 00421而不是0000000 […]

检查是否在整数变量中设置了标志

我正在制作自己的简单绘图引擎。 我正在尝试使用我认为称为按位比较的方式确定变量是否已设置为特定值,但我可能错了。 我总是对以下是什么以及如何使用它感到困惑: int DRAW_REPEAT_X = 70001; // I have a feeling I should make this value binary instead of a unique number, ie, 0 int DRAW_REPEAT_Y = 70002; // I have a feeling I should make this value binary instead of a unique number, ie, 2 int drawMethod = DRAW_REPEAT_X | DRAW_REPEAT_Y; // this […]

按位浮点数到Int

我试图找出这个算法,但我得到谷歌的所有东西都是用铸造做的。 我需要知道细节。 所以,如果我们有一个浮点x并想要返回它的二进制表示,我们需要做什么? 我知道我们需要返回浮点数,如果它的NaN或无穷大,但其他步骤是什么? 编辑 该函数接受一个unsigned int,就像它是一个float一样,然后返回该数字所代表的整数。 我不能使用转换,只是条件和按位运算符。

如何在C中的一行中设置多个位?

我会写两行来设置,比方说,有些东西。 这里,例如,我想将uint16_t值x中的高8位设置为y的低8位。 uint16_t y = 0x0034; uint16_t x = 0xFF12; 我想要x: assert(x == 0x3412); 我倾向于写这两行: x &= 0x00FF; x |= (y << 8); 有没有一种方法可以在不使用宏的情况下编写单行来实现相同的效果?

C – 对模数的按位运算的算法,对于非2的幂次数

我知道可以使用按位运算符计算2的幂的模数 x % 2^n == x & (2^n – 1). 但我想知道是否存在任何通用的按位算法来查找任何数的模数不是2的幂。例如, 7%5 先感谢您。

按位运算仍然可行吗?

维基百科,一个真正的知识来源,指出: 在大多数较旧的微处理器上,按位运算比加法和减法运算稍快,并且通常比乘法和除法运算快得多。 在现代体系结构中,情况并非如此:按位运算通常与添加速度相同(尽管仍然比乘法更快)。 是否有一个实际的理由来学习按位操作黑客,或者它现在只是你学习理论和好奇心的东西?