How are negative numbers represented in 32-bit signed integer?
Solution 1:
Most computers these days use two's complement for signed integers, but it can vary by hardware architecture, programming language, or other platform-specific issues.
For a two's-complement representation, the most-significant ("leftmost") bit is referred to as the sign bit, and it will be set for a negative integer and clear for a non-negative integer. However, it is more than just a "flag". See the Wikipedia article for more information.
Solution 2:
Usually it's twos-complement.
Solution 3:
From the C99 standard:
For signed integer types, the bits of the object representation shall be divided into three groups: value bits, padding bits, and the sign bit. There need not be any padding bits; there shall be exactly one sign bit. Each bit that is a value bit shall have the same value as the same bit in the object representation of the corresponding unsigned type (if there are M value bits in the signed type and N in the unsigned type, then M = N). If the sign bit is zero, it shall not affect the resulting value. If the sign bit is one, the value shall be modified in one of the following ways:
— the corresponding value with sign bit 0 is negated (sign and magnitude);
— the sign bit has the value -(2N) (two’s complement);
— the sign bit has the value -(2N - 1) (ones’ complement).
Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones’ complement), is a trap representation or a normal value. In the case of sign and magnitude and ones’ complement, if this representation is a normal value it is called a negative zero.
Solution 4:
I think the answer is 0110
, preceeded by 1 repeated 28 times, therefore it looks like:
1111 1111 1111 1111 1111 1111 1111 0110;
Steps:
-
bit representation for 10 is:
0000 0000 0000 0000 0000 0000 0000 1010;
-
0->1
and1->0
for all the bits:1111 1111 1111 1111 1111 1111 1111 0101;
-
add 1 to the last bit, and propagate to the bit ahead, done!
1111 1111 1111 1111 1111 1111 1111 0110;
===
You can verify by adding it with 10, and you will get 0 for all bits. As mentioned above, it is 2-based and follows two's complement.
Solution 5:
0xFFFFFFFF = -1
0xFFFFFFFE = -2
0xFFFFFFFD = -3
...
& so on