在2个整数之间交换不同的位-C

在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

我需要帮助

我需要解决在两个不同整数之间交换两个不同位的问题

示例(将(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 << 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=1
Number[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=1
    void交换(无符号整数编号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);
    }