Bitwise Manipulations in c
I'm having some problems in an assignment of mine.
The assignment is as follows: with a limited number of legal operations, perform various functions. No conditionals (if's) nor loops are allowed at all.
The legal operations are: <<, >>, +, |, ^, &, ~, !, =
I managed to do some of them, but there are those that I am having trouble with, such as:
1. Negate a number with int negate(int x), such as negate(4) returns -4
I'm not quite sure how to do the necessary two's complement in order to turn the number into a negative.
2. Extract byte n from word x with int getbyte(int x, int n), such as getbyte(0x12345678,1) will return 0x56
I do not understand this problem at all.
3. Find if x <= y with int islessorequal(int x, int y), return 1 if true and 0 if false, such as islessorequal(3,5) should return 1
It sounds simple enough, but limited to binary manipulation makes it rather difficult.
4. Convert from sign-magnitude to two's complement with int sm2tc(int x), where sm2tc(0x80000005) should return -5
I do not understand this byte-related problem either.
5. Find if x is a power of 2 in ispower2(int x) and return 1 if true and 0 if false - as such where ispower2(16) returns 1 and ispower2(15) returns false
This I understand would involve making sure the number contains only one bit with a 1, but I am not sure how to manipulate it without a conditional to discover that sole bit.
Any help would be appreciated - thank you!