Search code examples
bit-manipulationbitwise-operators

Bitwise complement operator (~) not working at a point in C


This code takes 2 byte int and exchanges the bytes.

Why the line in this code i commented seems to be not working?

INPUT/OUTPUT

*When i input 4 expected output is 1024 instead the 9th to 16th bits were all set to "1" after passing that line.

*Then i tried input 65280, whose expected output is 255 instead it outputs 65535 (sets all 16 bits to "1"

#include<stdio.h>

int main(void)
{
    short unsigned int num;
    printf("Enter the number: ");
    fscanf(stdin,"%hu",&num);
    
    printf("\nNumber with no swap between bytes---> %hu\n",num);
    
    unsigned char swapa,swapb;
    swapa=~num;
    num>>=8;
    swapb=~num;
    
    num=~swapa;
    num<<=8;
    num=~swapb;  //this line is not working why
    
    printf("Swaped bytes value----> %hu\n",num);
}

Solution

  • Integral promotions also the current value of num is getting clobbering by the commented line, probably want a |=, +=, or ^=.