C : 如何将特定位置的位更改为特定值?

C : How do I change bits in specific positions to specific values?

我试着找到这个问题,但所有其他问题都与我的问题无关。

我的问题:我有类似 0xFreeFoodU 的东西,我必须在其中获取特定位置并将它们翻转或使它们成为 1 或 0。

因此,例如,位置 2、6、10、14、18、22、26 和 30 中的位应保持不变,而位置 3、7、11、15、19、23、27 中的位应保持不变,并且 31 应该更改为 1。我不想 post 我的整个提示 bc 我不想作弊并让别人为我做我的硬件。但至少给我一个答案将帮助数百万人。

这是位操作。但我不知道如何操作特定位置的特定位。 :(

编辑 我无法上传完整的程序;它太长了。但是我有一个主要功能,我可以在其中调用我需要的功能。该函数理想情况下应该有 return 等等;到目前为止我有

returnval_num^0x22222222U; 但我应该补充一下。我只需要有关如何将某些位设置为 1 和 0 的帮助。是否需要屏蔽?

如果您成功完成了 XOR 部分,将位设置为 1 的部分几乎相同:

创建一个包含所有位的掩码:

unsigned int mask_0       = 0x....;      // bits that shall be set to 0

unsigned int mask_1       = 0x88888888;  // bits that shall be set to 1
// Note: this is 1<<3 | 1<<7 | 1<<11 ... All bits set that shall be changed

unsigned int mask_toggle  = 0x22222222;  // bits that shall be toggled
unsigned int value = 0xdeadbeef;

执行要求的操作:

// toggle bits
value = value ^ mask_toggle;

// set bits to 1
value = value | mask_1;

// set bits to 0
value = value & ~mask_0;

使用按位或运算符(|)设置位。

number |= (1 << bitposition);

使用按位与运算符(&)清除一位。

number &= ~(1 << bitposition);

XOR 运算符 (^) 可用于切换位。

number ^= (1 << bitposition);

这是程序

#include<stdio.h>
void main()
{
        int a[] = { 3, 7, 11, 15, 19, 23, 27, 31},b = 1200,i;
        for(i=0;i<8;i++)
                b ^= (1 << a[i]);
        printf("%d\n",b);
}