I am writing a function that computes 2 times the parameter x, but if it overflows it should return the largest positive or negative signed number. The problem is I can only use ! ~ & ^ | + << >>. 32-bit integers are involved.
This is what I have so far:
int boundedMult(int x){
int xSign = x>>31
int y = x << 1; // Multiply by 2
int signBit = y>>31; // Capture the signBit of the answer
int shift = signBit;
shift |= shift<<1; // Make shift all 1 or 0 depending on the sign bit
shift |= shift<<2;
shift |= shift<<4;
shift |= shift<<8;
shift |= shift<<15;
int answer = ~signBit<<31 | shift; // 01111... If signBit=1 and 1000... If signBit=0
}
Seems fine, right? I also can't use any constants outside of an unsigned byte (0-255) inclusive. I've tried so many approaches but I end up breaking one of these rules in all of them.