Integer data type
Machines and compilers with different word lengths in C are assigned different byte sizes.
The long type is the only machine-related.
Typical range of integer data types for the C language on 32-bit machines
Negative value range is 1 larger than positive
C Data Type |
Minimum |
Maximum |
Char |
? 128 |
127 |
unsigned char |
0 |
255 |
short [int] |
? 32,768 |
32,767 |
unsigned short [int] |
0 |
65,535 |
Int |
? 2,147,483,648 |
2,147,483,647 |
unsigned [int] |
0 |
4,294,967,295 |
long [int] |
? 2,147,483,648 |
2,147,483,647 |
unsigned long [int] |
0 |
4,294,967,295 |
Long Long [int] |
? 9,223,372,036,854,775,808 |
9,223,372,036,854,775,807 |
unsigned long long [int] |
0 |
18,446,744,073,709,551,615 |
Typical range of integer data types for the C language on 64-bit machines
Negative value range is 1 larger than positive
C Data Type |
Minimum |
Maximum |
Char |
? 128 |
127 |
unsigned char |
0 |
255 |
short [int] |
? 32,768 |
32,767 |
unsigned short [int] |
0 |
65,535 |
Int |
? 2,147,483,648 |
2,147,483,647 |
unsigned [int] |
0 |
4,294,967,295 |
long [int] |
? 9,223,372,036,854,775,808 |
9,223,372,036,854,775,807 |
unsigned long [int] |
0 |
18,446,744,073,709,551,615 |
Long Long [int] |
? 9,223,372,036,854,775,808 |
9,223,372,036,854,775,807 |
unsigned long long [int] |
0 |
18,446,744,073,709,551,615 |
Guaranteed range of values for integer data types in the
C language
range of values is symmetric
0
C data type |
Minimum |
Maximum |
Char |
? |
127 |
unsigned char |
0 |
255 |
short [int] |
? 32,767 |
32,767 |
unsigned short [int] |
0 |
65,535 |
int |
? 32,767 |
32,767 |
unsigned [int] |
65,535 |
long [int] |
? 2,147,483,647 |
2,147,483,647 |
unsigned long [int] |
0 |
4,294,967,295 |
Long Long [ int] |
? 9,223,372,036,854,775,807 |
9,223,372,036,854,775,807 |
unsigned lon g long [int] |
0 |
18,446,744,073,709,551,615 |
Added: c/C + + supports signed and unsigned, Java only supports signed
Encoding for unsigned numbers
Use B2 U w (x) function to turn a bit vector into a 10 binary number
The maximum number of unsigned values is:
So the unsigned value range is
Complement code
The computer indicates that negative numbers are usually in complement form
Use B2 T w (x) Replace a signed binary with a 10 binary
A binary in addition to the symbol bit to reverse the remaining bits, and then at the end of +1, get the complement
For example: 1011
- In addition to the symbol bit inversion: 1100
- End +1:1101
- The number of symbols determines that the number is negative, and the three bits determines the absolute value of the number is 5.
- So this number is--5.
The complement code values range from:
Since 0 is a non-plural, the number of positive numbers is less a
The advantages of the number of machines in the complement show:
The original code is simple and suitable for multiplication operation, but it is more complicated to add and subtract the number represented by the original code.
Complement, subtraction operation can be achieved by addition, for example [x-y] complement = [+[-y] complement,
Moreover, the number of sign bits can also participate in the operation, to facilitate the calculation of the results of positive and negative and whether overflow judgment.
Therefore, most of the computers use the complement to add and subtract and multiplication operations.
(not only integers, decimals can also be expressed in complement)
Determining the size of an integer type
It is important to have a certain size of performance coded by type
For example
It is important to make the data type compatible with the data type specified by the protocol.
Java requires a complement representation, and the value is the same as the typical range for the integer data type of the C language on a 64-bit machine. Single byte with Byte, no long long.
Anti-code and complement inverse code formula
Complement formula
Conversion between signed and unsigned
The C language converts short int to unsight short, changing the value without changing the bit pattern
Like what
-12345 (complement) binary: 1100 1111 1100 0111
Convert to unsigned
53191 (unsigned) binary: 1100 1111 1100 0111
Signed Conversion unsigned
Unsigned sign-changer
In general, for W-bit numbers
- Signed and unsigned
- Positive number unchanged
- Negative numbers are added 2^w
- Unsigned change-Signed
- If the number is less than 2^ (w-1), it does not change
- If the number is greater than 2^ (w-1), subtract 2^w
operator, if one is a signed number and one is an unsigned number, the signed number is converted to unsigned. This conversion will appear to be not intuitive in logical operations
Extends the bit representation of a number
- Converts an unsigned number to a large range of data types, as long as 0 is added at the beginning, and this operation is called 0 expansion
- Extend the complement number to a larger range of data types, as long as a copy of the value of the most significant bit is added earlier, that is, the highest bit is 0, add 0 to 1 and add 1.
- For example, a 10,104-bit number expands to 6 bits, which is 111010.
- For changing a short type number to unsigned int, change the size and then from signed to unsigned
Truncate numbers
Unsigned number if the operation becomes negative, it will be considered a large unsigned number in the computer. This feature can be a security risk for your computer. To prevent this problem, never use unsigned
From for notes (Wiz)
"In-depth understanding of computer systems" 2.2 Integer Representation