x = abs(x); |
|
| I need to set the MSB of a decimal number to 0 |
| So i don't know how many bits are there in the binary representation of the number. How can i set its MSB to 0 without having to convert it to binary or doing any long operations? |
|
|
& to combine the mask with the value you are interested in. Note, it will be most effective on negative numbers. A positive signed integer will already have the leftmost bit set to zero. |
|
|
|
| setting the MSB when the exponents are different won't give consistent results (numerically) |
| I read the phrase "decimal number" as "integer". I'm not sure why.. |
| I need to set the MSB of a decimal number to 0 |
|
|
|
|
number: 11111111010000111001111010110010 (-12345678)
msb_cleared: 01111111010000111001111010110010 (2135137970)
ms_set_bit_cleared: 01111111010000111001111010110010 (2135137970)
----------
number: 11111111111111111111100000110000 (-2000)
msb_cleared: 01111111111111111111100000110000 (2147481648)
ms_set_bit_cleared: 01111111111111111111100000110000 (2147481648)
----------
number: 11111111111111111111111111111111 (-1)
msb_cleared: 01111111111111111111111111111111 (2147483647)
ms_set_bit_cleared: 01111111111111111111111111111111 (2147483647)
----------
number: 00000000000000000000000000000000 (0)
msb_cleared: 00000000000000000000000000000000 (0)
ms_set_bit_cleared: 00000000000000000000000000000000 (0)
----------
number: 00000000000000000000000000001100 (12)
msb_cleared: 00000000000000000000000000001100 (12)
ms_set_bit_cleared: 00000000000000000000000000000100 (4)
----------
number: 00000000101111000110000101001110 (12345678)
msb_cleared: 00000000101111000110000101001110 (12345678)
ms_set_bit_cleared: 00000000001111000110000101001110 (3957070)
----------
number: 1111111111111111111111111111111111111111010000111001111010110010 (18446744073697205938)
msb_cleared: 0111111111111111111111111111111111111111010000111001111010110010 (9223372036842430130)
ms_set_bit_cleared: 0111111111111111111111111111111111111111010000111001111010110010 (9223372036842430130)
----------
number: 1111111111111111111111111111111111111111111111111111100000110000 (18446744073709549616)
msb_cleared: 0111111111111111111111111111111111111111111111111111100000110000 (9223372036854773808)
ms_set_bit_cleared: 0111111111111111111111111111111111111111111111111111100000110000 (9223372036854773808)
----------
number: 1111111111111111111111111111111111111111111111111111111111111111 (18446744073709551615)
msb_cleared: 0111111111111111111111111111111111111111111111111111111111111111 (9223372036854775807)
ms_set_bit_cleared: 0111111111111111111111111111111111111111111111111111111111111111 (9223372036854775807)
----------
number: 0000000000000000000000000000000000000000000000000000000000000000 (0)
msb_cleared: 0000000000000000000000000000000000000000000000000000000000000000 (0)
ms_set_bit_cleared: 0000000000000000000000000000000000000000000000000000000000000000 (0)
----------
number: 0000000000000000000000000000000000000000000000000000000000001100 (12)
msb_cleared: 0000000000000000000000000000000000000000000000000000000000001100 (12)
ms_set_bit_cleared: 0000000000000000000000000000000000000000000000000000000000000100 (4)
----------
number: 0000000000000000000000000000000000000000101111000110000101001110 (12345678)
msb_cleared: 0000000000000000000000000000000000000000101111000110000101001110 (12345678)
ms_set_bit_cleared: 0000000000000000000000000000000000000000001111000110000101001110 (3957070) |