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);
}
我试着找到这个问题,但所有其他问题都与我的问题无关。
我的问题:我有类似 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);
}