Tag:

C位字段变量正在打印意外值

struct m { int parent:3; int child:3; int mother:2; }; void main() { struct m son={2,-6,5}; printf(“%d %d %d”,son.parent,son.child,son.mother); } 任何人都可以帮忙说出为什么程序的输出是2 2 1 ?

如何在C中进行逐位XOR

我正在尝试进入C编程,而我只能用~和&运算符编写一个按位XOR函数。 示例: bitXor(4, 5) = 1 。 我怎样才能做到这一点? 到目前为止我有这个: int bitXor(int x, int y) { return z; }

如何检查值是偶数奇偶校验还是奇数?

如果偶数为1位,则值具有偶校验。 如果具有奇数1位,则该值具有奇校验。 例如, 0110具有偶校验,而1110具有奇校验。 如果x具有偶校验,我必须返回1 。 int has_even_parity(unsigned int x) { return }

将32位整数移位32位

我正在甩掉一些C代码,我需要将32位int位移位32位。 当我使用参数n = 0运行此代码时,不会发生转换。 int x = 0xFFFFFFFF; int y = x << (32 – n); 为什么这不起作用?

在C中使用位字段时的字段顺序

我有一个以下类型的结构 typedef struct { unsigned int a : 8; unsigned int b : 6; unsigned int c : 2; }x, *ptr; 我想做的是改变字段c的值。 我做了类似以下的事情 x structure = { 0 }; x->c = 1; 当我查看内存映射时,我希望找到00 01 ,但我找到00 40 。 看起来在排列第二个字节时,它将c字段放在最低位中,将b字段放在最高位中。 我在GCC和Windows编译器上都看到了这一点。 现在,我做的是以下,这是正常的。 unsigned char ptr2 = (unsigned char*) ptr *(ptr2 + 1) &= 0xFC *(ptr2 + 1) […]

C / C ++位数组或位向量

我正在学习C / C ++编程并遇到过“位数组”或“位向量”的用法。 我无法理解他们的目的? 这是我的疑惑 – 它们是否用作布尔标志? 可以使用int数组吗? (当然更多的记忆,但..) 这个Bit-Masking的概念是什么? 如果位掩码是简单的位操作以获得适当的标志,那么如何为它们编程? 是不是很难在头脑中做这个操作,看看标志会是什么,与十进制数相对应? 我正在寻找应用程序,以便我能更好地理解。 对于Eg – 问:您将获得一个包含范围内的整数(1到1百万)的文件。 有一些重复,因此缺少一些数字。 找到找到丢失数字的最快方法? 对于上面的问题,我已经阅读了解决方案,告诉我使用位数组。 如何将每个整数存储一下?

用于计数位的高效按位运算或找到最右侧的位

给定unsigned int,我必须执行以下操作: 计算设置为1的位数 找到最左边1位的索引 找到最右边1位的索引 (该操作不应该是架构依赖)。 我已经使用按位移位完成了这项工作,但我必须迭代几乎所有的位(es.32)。 例如,计算1: unsigned int number= …; while(number != 0){ if ((number & 0x01) != 0) ++count; number >>=1; } 其他操作类似。 所以我的问题是:有没有更快的方法呢?