在2个整数之间交换不同的位-C
我需要帮助 我需要解决在两个不同整数之间交换两个不同位的问题 示例(将(101)的第3位与(100)的第2位交换) 将导致(001)和(110) 我的审判在2个整数之间交换不同的位-C,c,bit-manipulation,swap,C,Bit Manipulation,Swap,我需要帮助 我需要解决在两个不同整数之间交换两个不同位的问题 示例(将(101)的第3位与(100)的第2位交换) 将导致(001)和(110) 我的审判 void swap(unsigned int numberA, unsigned int numberB, int bitPositionA, int bitPositionB) { unsigned int aShift = 1 << bitPositionA, bShift = 1 << bitPositi
void swap(unsigned int numberA, unsigned int numberB, int bitPositionA, int bitPositionB)
{
unsigned int aShift = 1 << bitPositionA, bShift = 1 << bitPositionB;
unsigned int bitA = numberA & aShift;
unsigned int bitB = numberB & bShift;
numberB &= ~bShift; // Set the bit to `0`
numberB |= bitA; // Set to the actual bit value
numberA &= ~aShift; // Set the bit to `0`
numberA |= bitB; // Set to the actual bit value
printf("Number[1] => %d Number => %d",numberA,numberB);
}
void交换(无符号整数a、无符号整数b、整数位a、整数位b)
{
无符号整数aShift=1Number[1]=>5 Number=>0
您忘记了位,就像数组一样,是从零开始编号的,而不是从一开始编号的
将对交换的呼叫替换为:
swap(5, 4, 2, 1);
新位中的OR代码不会将它们移动到新编号中应该进入的位位置。它们保留在源编号中从中取出的位位置
numberB &= ~bShift; // Set the bit to `0`
if(bitA)
bitA = 1 << bitPositionB;
numberB |= bitA; // Set to the actual bit value
numberA &= ~aShift; // Set the bit to `0`
if(bitB)
bitB = 1 << bitPositionA;
numberA |= bitB; // Set to the actual bit value
numberB&=~bShift;//将位设置为'0`
如果(比特)
位A=1void交换(无符号整数编号A、无符号整数编号B、整数位A、整数位B)
{
unsigned int aShift=1(位位置B-1);//设置为实际位值
numberA&=~aShift;//将位设置为'0`
numberA |=位B>>(位A-1);//设置为实际位值
printf(“编号[1]=>%02X编号=>%02X\n”,编号a,编号b);
}
Hello@Govind Parmar,对不起,这会导致Number[1]=>1 Number[2]=>4
不是要求的结果。@HassanA.El-Seoudy你说得对;我刚刚更新了我的answer@HassanA.El-没问题,如果您对我的答案满意,请点击复选标记接受!
void swap(unsigned int numberA, unsigned int numberB, int bitPositionA, int bitPositionB)
{
unsigned int aShift = 1 << bitPositionA-1, bShift = 1 << bitPositionB-1;
unsigned int bitA = numberA & aShift;
unsigned int bitB = numberB & bShift;
numberB &= ~bShift; // Set the bit to `0`
numberB |= bitA >> (bitPositionB-1); // Set to the actual bit value
numberA &= ~aShift; // Set the bit to `0`
numberA |= bitB >> (bitPositionA-1); // Set to the actual bit value
printf("Number[1] => %02X Number => %02X \n",numberA,numberB);
}