Source: Internet
Author: User

Program apes may be unfamiliar with binary systems, which are widely used in computing technology. Binary data is a number represented by 0 and 12 digits. But many people will convert binary to integers, but how do you represent negative numbers in binary notation? Some people would say that adding a negative number in front of the binary fits. And the computer can only know 0 and 1, and how to add an extra negative sign? So we need to use 0 and a way to represent negative numbers. If you want to understand this, we need to first understand what binary source code is.

What's the original code?The original code (true form) is a binary fixed-point representation of numbers in a computer. The original code notation adds a sign bit to the value (that is, the highest bit is the sign bit): A positive number is 0, the bit is 1 (0 has two representations: +0 and-0), and the remaining bits represent the size of the value.

For example, we use 8-bit binary to represent a number, +11 of the original code for 00001011,-11 is 10001011

The original code can not participate directly in the operation, may be an error. For example, in mathematics, 1+ (-1) = 0, whereas in binary 00000001 + 10000001 = 10000010, the conversion is decimal to 2. Obviously there was a mistake.

Binary source code, complement and inverse code

How do we convert decimal-3 to binary notation? First, we convert the absolute value +3 of 3 to binary, assuming that it is of type int (32 bits), then the binary representation is:

0000 0000 0000 0000 0000 0000 0000 0011

The conversion of negative numbers into binary system is divided into 3 steps:

**1, first convert negative numbers to the corresponding original code**

-3 of the original code is (that is, +3 converted to binary string):

0000 0000 0000 0000 0000 0000 0000 0011

**2, then the original code for each of the reverse operation to get the code.**

Reverse operation: 0 becomes 1, 1 becomes 0, and the result of reverse is:

1111 1111 1111 1111 1111 1111 1111 1100

**3, the counter code +1 to get the complement**

1111 1111 1111 1111 1111 1111 1111 1101

Now use Windows's own calculator to verify that win+r input calc, change the calculator to programmer, select two words (4 bytes, 32 bits)

Turn on the Calculator scientific computing function with Windows self

**Select Decimal in the calculator, then enter-3:**

Windows own calculator scientific calculation decimal down input-3

Then click Binary conversion to convert decimal 3 to binary:

Convert decimal-3 to Binary

Normally, the conversion of binary to decimal is not a problem. But in the similar javascript/php and so on integer type, the general Int/integer all has the digit limit, generally is 32 bit length. Also indicates that integers in these languages have the maximum value, while the 32-bit maximum integer limit is: 2147483647, which is binary:

01111111111111111111111111111111

So it's easy to understand that 32-bit binary, when the first digit is 0, means that this is a positive number, and if it's 1, then that's negative.

**What is a 32-bit binary 1.,111,111,111,111,11e,+32 value?**

11111111111111111111111111111001

As above, the binary length is 32 digits, that is, the integer is a negative number, first reverse, get the inverse code:

00000000000000000000000000000110

Counter code +1, get:

00000000000000000000000000000111

Convert to decimal: 7

Because it's a negative number, add a minus sign and convert to 7.

**Fun: 32-bit binary 1.,111,111,111,111,11e,+31 What is the value of the binary?**

This is a more interesting, do not mislead to this is a negative number, in fact, this is an integer, because there are only 31 digits, need to add 0 in front, to make up 32 bits, into:

Decimal negative turn octal, hex01111111111111111111111111111001

Negative numbers are converted into octal, hexadecimal, only on the basis of the complement (binary), 3-bit synthesis of a calculation, or 4-bit synthesis of a calculation

-The conversion of 3 to binary is:

1111 1111 1111 1111 1111 1111 1111 1101

The octal system will be 3 binary from right to left every 3 bits for a unit, not enough three bits with 0 fill namely:

011 111 111 111 111 111 111 111 111 111 101

Calculate each unit, and the result is: 37777777775

Hexadecimal merges the binary of 3 from right to left every 4 bits into one unit, namely:

1111 1111 1111 1111 1111 1111 1111 1101

Calculated as: fffffffd

Converts decimal-3 to octal and hexadecimal