How to change the sign of int using bitwise operators? Obviously we can use x*=-1
or x/=-1
. Is there any fastest way of doing this?
I did a sm
Solution using high level language
Questions like these are popular in interviews and competitive programming world .
I landed here researching more solution for negation of a number without using - or + operator .
For this :
Then add 1 to the number obtained in step 1 using Half adder logic :
int addNumbers(int x, int y) {
if(y==0) return x; // carry is 0 return
addNumbers(x^y,(x&y)<<1); }
Here x^y performs addition of bits and x&y handles carry operation
The speed difference between non-floating point (e.g. int math) addition/multiplication and bitwise operations is less than negligible on almost all machines.
There is no general way to turn an n-bit signed integer into its negative equivalent using only bitwise operations, as the negation operation looks like x = (~x) + 1
, which requires one addition. However, assuming the signed integer is 32 bit you can probably write a bitwise equation to do this calculation. Note: do not do this.
The most common, readable way to negate a number is x = -x
.
Java uses Complement Two representation. In order to change a sign, it means you must do a bitwise negation (it would be equivalent to xor with FFFF) and add 1.
x = ~x + 1;
I am almost sure that -x
is, if anything, faster than that.