Python 2s bổ sung hex

Con người sử dụng hệ thống số thập phân [cơ số 10] và thập phân [cơ số 12] để đếm và đo lường [có lẽ vì chúng ta có 10 ngón tay và hai ngón chân cái]. Máy tính sử dụng hệ thống số nhị phân [cơ sở 2], vì chúng được tạo từ các thành phần kỹ thuật số nhị phân [được gọi là bóng bán dẫn] hoạt động ở hai trạng thái - bật và tắt. Trong điện toán, chúng ta cũng sử dụng hệ thống số thập lục phân [cơ số 16] hoặc hệ số bát phân [cơ số 8], như một dạng thu gọn để biểu diễn các số nhị phân

Hệ thống số thập phân [cơ số 10]

Hệ thống số thập phân có mười ký hiệu.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
7,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
8,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
9,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
0,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
1,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
2,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
3, và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
4, được gọi là các chữ số. Nó sử dụng ký hiệu vị trí. Tức là chữ số có nghĩa nhỏ nhất [chữ số ngoài cùng bên phải] là thứ tự của
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
5 [đơn vị hoặc hàng đơn vị], chữ số ngoài cùng bên phải thứ hai là thứ tự của
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
6 [chục], chữ số thứ ba ngoài cùng bên phải là của . Ví dụ,

735 = 700 + 30 + 5 = 7×10^2 + 3×10^1 + 5×10^0

Chúng tôi sẽ biểu thị một số thập phân có hậu tố tùy chọn

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
9 nếu có sự mơ hồ

Hệ thống số nhị phân [cơ số 2]

Hệ thống số nhị phân có hai ký hiệu.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, được gọi là bit. Nó cũng là một ký hiệu vị trí, ví dụ,

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0

Chúng ta sẽ biểu thị một số nhị phân có hậu tố

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
2. Một số ngôn ngữ lập trình biểu thị số nhị phân với tiền tố
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
3 hoặc
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
4 [e. g. ,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
5] hoặc tiền tố
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
6 với các bit được trích dẫn [e. g. ,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
7]

Một chữ số nhị phân được gọi là một bit. Tám bit được gọi là một byte [tại sao lại là đơn vị 8 bit? Chắc là vì

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
8]

Hệ thống số thập lục phân [Cơ số 16]

Hệ thống số thập lục phân sử dụng 16 ký hiệu.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
7,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
8,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
9,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
0,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
1,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
2,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
3,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
4,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
9,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
2,
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
1,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
9,
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
3, và
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
4, được gọi là các chữ số hex. Đó là một ký hiệu vị trí, ví dụ,

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0

Chúng ta sẽ biểu thị một số thập lục phân [viết tắt là hex] bằng hậu tố

A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
5. Một số ngôn ngữ lập trình biểu thị các số hex bằng tiền tố
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
6 hoặc
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
7 [e. g. ,
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
8] hoặc tiền tố
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
9 với các chữ số hex được trích dẫn [e. g. ,
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
0]

Mỗi chữ số thập lục phân còn được gọi là chữ số hex. Hầu hết các ngôn ngữ lập trình đều chấp nhận chữ thường

To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
1 đến
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
2 cũng như chữ hoa
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
3 đến
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
4

Máy tính sử dụng hệ thống nhị phân trong các hoạt động bên trong của chúng, vì chúng được xây dựng từ các thành phần điện tử kỹ thuật số nhị phân với 2 trạng thái - bật và tắt. Tuy nhiên, việc viết hoặc đọc một chuỗi dài các bit nhị phân rất cồng kềnh và dễ bị lỗi [hãy thử đọc chuỗi nhị phân này.

To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
5, giống với hệ thập lục phân
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
6]. Hệ thập lục phân được sử dụng dưới dạng rút gọn hoặc viết tắt cho các bit nhị phân. Mỗi chữ số hex tương đương với 4 bit nhị phân, i. e. , viết tắt cho 4 bit, như sau

HexadecimalBinaryDecimal000000100011200102300113401004501015601106701117810008910019A101010B101111C110012D110113E111014F111115

Chuyển đổi từ thập lục phân sang nhị phân

Thay thế mỗi chữ số hex bằng 4 bit tương đương [như được liệt kê trong bảng trên], ví dụ:

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B

Chuyển đổi từ nhị phân sang thập lục phân

Bắt đầu từ bit ngoài cùng bên phải [bit ít quan trọng nhất], thay thế từng nhóm 4 bit bằng chữ số hex tương đương [đệm các bit ngoài cùng bên trái bằng 0 nếu cần], ví dụ:

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH

Điều quan trọng cần lưu ý là số thập lục phân cung cấp một dạng nhỏ gọn hoặc tốc ký để biểu thị các bit nhị phân

Chuyển đổi từ Cơ số
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
7 sang Số thập phân [Cơ số 10]

Cho một cơ số r có n chữ số.

To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
8 [cơ số r], số thập phân tương đương được cho bởi

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0

Ví dụ như,

A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]

Chuyển đổi từ Số thập phân [Cơ số 10] sang Cơ số
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
7

Sử dụng phép chia/số dư lặp đi lặp lại. Ví dụ,

To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]

The above procedure is actually applicable to conversion between any 2 base systems. For example,

To convert 1023[base 4] to base 3:
  1023[base 4]/3 => quotient=25D remainder=0
  25D/3          => quotient=8D  remainder=1
  8D/3           => quotient=2D  remainder=2
  2D/3           => quotient=0   remainder=2 [quotient=0 stop]
  Hence, 1023[base 4] = 2210[base 3]

Conversion between Two Number Systems with Fractional Part

  1. Separate the integral and the fractional parts
  2. For the integral part, divide by the target radix repeatably, and collect the ramainder in reverse order
  3. For the fractional part, multiply the fractional part by the target radix repeatably, and collect the integral part in the same order

ví dụ 1. thập phân sang nhị phân

Convert 18.6875D to binary
Integral Part = 18D
  18/2 => quotient=9 remainder=0
  9/2  => quotient=4 remainder=1
  4/2  => quotient=2 remainder=0
  2/2  => quotient=1 remainder=0
  1/2  => quotient=0 remainder=1 [quotient=0 stop]
  Hence, 18D = 10010B
Fractional Part = .6875D
  .6875*2=1.375 => whole number is 1
  .375*2=0.75   => whole number is 0
  .75*2=1.5     => whole number is 1
  .5*2=1.0      => whole number is 1
  Hence .6875D = .1011B
Combine, 18.6875D = 10010.1011B

Example 2. Decimal to Hexadecimal

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
0

Exercises [Number Systems Conversion]

  1. Convert the following decimal numbers into binary and hexadecimal numbers
  2. Convert the following binary numbers into hexadecimal and decimal numbers
    1. To convert 1023[base 4] to base 3:
        1023[base 4]/3 => quotient=25D remainder=0
        25D/3          => quotient=8D  remainder=1
        8D/3           => quotient=2D  remainder=2
        2D/3           => quotient=0   remainder=2 [quotient=0 stop]
        Hence, 1023[base 4] = 2210[base 3]
      0
    2. To convert 1023[base 4] to base 3:
        1023[base 4]/3 => quotient=25D remainder=0
        25D/3          => quotient=8D  remainder=1
        8D/3           => quotient=2D  remainder=2
        2D/3           => quotient=0   remainder=2 [quotient=0 stop]
        Hence, 1023[base 4] = 2210[base 3]
      1
    3. To convert 1023[base 4] to base 3:
        1023[base 4]/3 => quotient=25D remainder=0
        25D/3          => quotient=8D  remainder=1
        8D/3           => quotient=2D  remainder=2
        2D/3           => quotient=0   remainder=2 [quotient=0 stop]
        Hence, 1023[base 4] = 2210[base 3]
      2
  3. Convert the following hexadecimal numbers into binary and decimal numbers
  4. Convert the following decimal numbers into binary equivalent

Answers. You could use the Windows' Calculator [

To convert 1023[base 4] to base 3:
  1023[base 4]/3 => quotient=25D remainder=0
  25D/3          => quotient=8D  remainder=1
  8D/3           => quotient=2D  remainder=2
  2D/3           => quotient=0   remainder=2 [quotient=0 stop]
  Hence, 1023[base 4] = 2210[base 3]
3] to carry out number system conversion, by setting it to the Programmer or scientific mode. [Chạy "calc" ⇒ Chọn menu "Cài đặt" ⇒ Chọn chế độ "Lập trình viên" hoặc "Khoa học". ]

  1. To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    4,
    To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    5,
    To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    6,
    To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    7,
    To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    8,
    To convert 1023[base 4] to base 3:
      1023[base 4]/3 => quotient=25D remainder=0
      25D/3          => quotient=8D  remainder=1
      8D/3           => quotient=2D  remainder=2
      2D/3           => quotient=0   remainder=2 [quotient=0 stop]
      Hence, 1023[base 4] = 2210[base 3]
    9
  2. Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    0,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    1,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    2,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    3,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    4,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    5
  3. Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    6,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    7,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    8,
    Convert 18.6875D to binary
    Integral Part = 18D
      18/2 => quotient=9 remainder=0
      9/2  => quotient=4 remainder=1
      4/2  => quotient=2 remainder=0
      2/2  => quotient=1 remainder=0
      1/2  => quotient=0 remainder=1 [quotient=0 stop]
      Hence, 18D = 10010B
    Fractional Part = .6875D
      .6875*2=1.375 => whole number is 1
      .375*2=0.75   => whole number is 0
      .75*2=1.5     => whole number is 1
      .5*2=1.0      => whole number is 1
      Hence .6875D = .1011B
    Combine, 18.6875D = 10010.1011B
    9,
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    00,
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    01
  4. ?? [You work it out. ]

Computer Memory & Data Representation

Computer uses a fixed number of bits to represent a piece of data, which could be a number, a character, or others. A n-bit storage location can represent up to

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
02 distinct entities. For example, a 3-bit memory location can hold one of these eight binary patterns.
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
03,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
04,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
05,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
06,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
07,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
08,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
09, or
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
10. Hence, it can represent at most 8 distinct entities. You could use them to represent numbers 0 to 7, numbers 8881 to 8888, characters 'A' to 'H', or up to 8 kinds of fruits like apple, orange, banana; or up to 8 kinds of animals like lion, tiger, etc

Integers, for example, can be represented in 8-bit, 16-bit, 32-bit or 64-bit. You, as the programmer, choose an appropriate bit-length for your integers. Your choice will impose constraint on the range of integers that can be represented. Besides the bit-length, an integer can be represented in various representation schemes, e. g. , unsigned vs. signed integers. An 8-bit unsigned integer has a range of 0 to 255, while an 8-bit signed integer has a range of -128 to 127 - both representing 256 distinct numbers

It is important to note that a computer memory location merely stores a binary pattern. It is entirely up to you, as the programmer, to decide on how these patterns are to be interpreted. For example, the 8-bit binary pattern

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
11 can be interpreted as an unsigned integer
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
12, or an ASCII character
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
3, or some secret information known only to you. In other words, you have to first decide how to represent a piece of data in a binary pattern before the binary patterns make sense. The interpretation of binary pattern is called data representation or encoding. Furthermore, it is important that the data representation schemes are agreed-upon by all the parties, i. e. , industrial standards need to be formulated and straightly followed

Once you decided on the data representation scheme, certain constraints, in particular, the precision and range will be imposed. Hence, it is important to understand data representation to write correct and high-performance programs

Rosette Stone and the Decipherment of Egyptian Hieroglyphs

Egyptian hieroglyphs [next-to-left] were used by the ancient Egyptians since 4000BC. Unfortunately, since 500AD, no one could longer read the ancient Egyptian hieroglyphs, until the re-discovery of the Rosette Stone in 1799 by Napoleon's troop [during Napoleon's Egyptian invasion] near the town of Rashid [Rosetta] in the Nile Delta

The Rosetta Stone [left] is inscribed with a decree in 196BC on behalf of King Ptolemy V. The decree appears in three scripts. the upper text is Ancient Egyptian hieroglyphs, the middle portion Demotic script, and the lowest Ancient Greek. Because it presents essentially the same text in all three scripts, and Ancient Greek could still be understood, it provided the key to the decipherment of the Egyptian hieroglyphs

The moral of the story is unless you know the encoding scheme, there is no way that you can decode the data

Reference and images. Wikipedia

Integer Representation

Integers are whole numbers or fixed-point numbers with the radix point fixed after the least-significant bit. They are contrast to real numbers or floating-point numbers, where the position of the radix point varies. It is important to take note that integers and floating-point numbers are treated differently in computers. They have different representation and are processed differently [e. g. , floating-point numbers are processed in a so-called floating-point processor]. Floating-point numbers will be discussed later

Computers use a fixed number of bits to represent an integer. The commonly-used bit-lengths for integers are 8-bit, 16-bit, 32-bit or 64-bit. Besides bit-lengths, there are two representation schemes for integers

  1. Unsigned Integers. có thể đại diện cho số không và số nguyên dương
  2. Signed Integers. can represent zero, positive and negative integers. Three representation schemes had been proposed for signed integers
    1. Sign-Magnitude representation
    2. 1's Complement representation
    3. 2's Complement representation

You, as the programmer, need to decide on the bit-length and representation scheme for your integers, depending on your application's requirements. Suppose that you need a counter for counting a small quantity from 0 up to 200, you might choose the 8-bit unsigned integer scheme as there is no negative numbers involved

n-bit Unsigned Integers

Unsigned integers can represent zero and positive integers, but not negative integers. The value of an unsigned integer is interpreted as "the magnitude of its underlying binary pattern"

Example 1. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary pattern is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
15, the value of this unsigned integer is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
16

Example 2. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
17 and the binary pattern is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
18, the value of this unsigned integer is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
19

Example 3. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
17 and the binary pattern is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
21, the value of this unsigned integer is
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5

An n-bit pattern can represent

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
02 distinct integers. An n-bit unsigned integer can represent integers from
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 to
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
25, as tabulated below

nMinimumMaximum80[2^8]-1  [=255]160[2^16]-1 [=65,535]320[2^32]-1 [=4,294,967,295] [9+ digits]640[2^64]-1 [=18,446,744,073,709,551,615] [19+ digits]

Signed Integers

Signed integers can represent zero, positive integers, as well as negative integers. Three representation schemes are available for signed integers

  1. Sign-Magnitude representation
  2. 1's Complement representation
  3. 2's Complement representation

In all the above three schemes, the most-significant bit [msb] is called the sign bit. Bit dấu được sử dụng để biểu thị dấu của số nguyên - với 0 cho số nguyên dương và 1 cho số nguyên âm. Tuy nhiên, độ lớn của số nguyên được hiểu khác nhau trong các sơ đồ khác nhau

Các số nguyên có dấu n-bit trong biểu diễn độ lớn của dấu

Trong đại diện ký hiệu cường độ

  • Bit quan trọng nhất [msb] là bit dấu, với giá trị 0 biểu thị số nguyên dương và 1 biểu thị số nguyên âm
  • n-1 bit còn lại đại diện cho độ lớn [giá trị tuyệt đối] của số nguyên. Giá trị tuyệt đối của số nguyên được hiểu là "độ lớn của mẫu nhị phân [n-1]-bit"

ví dụ 1. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 và biểu diễn nhị phân là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
27
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
29
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
30

ví dụ 2. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 và biểu diễn nhị phân là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
32
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
34
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
35

ví dụ 3. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 và biểu diễn nhị phân là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
37
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
39
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
40

Ví dụ 4. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 và biểu diễn nhị phân là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
42
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
39
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
45

Những hạn chế của đại diện ký hiệu cường độ là

  1. Có hai cách biểu diễn [
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    46 và
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    47] cho số 0, điều này có thể dẫn đến sự không hiệu quả và nhầm lẫn
  2. Số nguyên dương và số âm cần được xử lý riêng

Số nguyên có dấu n-bit trong biểu diễn phần bù của 1

Trong đại diện bổ sung của 1

  • Một lần nữa, bit quan trọng nhất [msb] là bit dấu, với giá trị 0 đại diện cho số nguyên dương và 1 đại diện cho số nguyên âm
  • N-1 bit còn lại đại diện cho độ lớn của số nguyên, như sau
    • đối với các số nguyên dương, giá trị tuyệt đối của số nguyên bằng "độ lớn của mẫu nhị phân [n-1]-bit"
    • for negative integers, the absolute value of the integer is equal to "the magnitude of the complement [inverse] of the [n-1]-bit binary pattern" [hence called 1's complement]

ví dụ 1. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
27
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
29
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
30

Example 2. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
32
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
   Absolute value is the complement of
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
56, i. e. ,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
57
   Hence, the integer is
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
58

Example 3. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
37
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
39
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
40

Example 4. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
65
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
   Absolute value is the complement of
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
67, i. e. ,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
39
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
45

Again, the drawbacks are

  1. There are two representations [
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    46 and
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    71] for zero
  2. The positive integers and negative integers need to be processed separately

n-bit Sign Integers in 2's Complement Representation

In 2's complement representation

  • Một lần nữa, bit quan trọng nhất [msb] là bit dấu, với giá trị 0 đại diện cho số nguyên dương và 1 đại diện cho số nguyên âm
  • N-1 bit còn lại đại diện cho độ lớn của số nguyên, như sau
    • đối với các số nguyên dương, giá trị tuyệt đối của số nguyên bằng "độ lớn của mẫu nhị phân [n-1]-bit"
    • đối với các số nguyên âm, giá trị tuyệt đối của số nguyên bằng "độ lớn của phần bù của mẫu nhị phân [n-1]-bit cộng với một" [do đó được gọi là phần bù 2]

ví dụ 1. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
27
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
29
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
30

Example 2. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
32
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
Giá trị tuyệt đối là phần bù của
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
56 cộng với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, i. e. ,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
82
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
83

Example 3. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
37
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 ⇒ dương
Giá trị tuyệt đối là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
39
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
40

Example 4. Suppose that

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14 and the binary representation
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
65
Bit dấu là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 ⇒ âm
Giá trị tuyệt đối là phần bù của
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
67 cộng với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, i. e. ,
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
94
Do đó, số nguyên là
10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
35

Máy tính sử dụng biểu diễn bù của 2 cho các số nguyên có dấu

Chúng ta đã thảo luận về ba cách biểu diễn cho số nguyên có dấu. độ lớn có dấu, phần bù 1 và phần bù 2. Máy tính sử dụng phần bù 2 để biểu diễn các số nguyên có dấu. Điều này là do

  1. Chỉ có một biểu diễn cho số 0 trong phần bù 2, thay vì hai biểu diễn theo độ lớn dấu và phần bù 1
  2. Các số nguyên dương và âm có thể được xử lý cùng nhau trong phép cộng và phép trừ. Phép trừ có thể được thực hiện bằng "logic cộng"

ví dụ 1. Phép Cộng Hai Số Nguyên Dương. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
96

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
1

ví dụ 2. Phép trừ được coi là phép cộng của số nguyên dương và số âm. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
97

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
2

ví dụ 3. Phép Cộng Hai Số Nguyên Âm. Giả sử rằng

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
98

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
3

Vì độ chính xác cố định [i. e. , số bit cố định], số nguyên có dấu bổ sung của n-bit 2 có một phạm vi nhất định. Ví dụ: đối với

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
14, phạm vi của các số nguyên có dấu phần bù của 2 là từ
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
00 đến
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
01. Trong quá trình cộng [và trừ], điều quan trọng là phải kiểm tra xem kết quả có vượt quá phạm vi này hay không, nói cách khác, liệu có xảy ra tràn hoặc tràn

Ví dụ 4. Tràn ra. Suppose that

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
02 [overflow - beyond the range]

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
4

Example 5. Underflow. Suppose that

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
03 [underflow - below the range]

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
5

The following diagram explains how the 2's complement works. By re-arranging the number line, values from

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
00 to
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
01 are represented contiguously by ignoring the carry bit

Range of n-bit 2's Complement Signed Integers

An n-bit 2's complement signed integer can represent integers from

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
06 to
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
07, as tabulated. Take note that the scheme can represent all the integers within the range, without any gap. In other words, there is no missing integers within the supported range

nminimummaximum8-[2^7]  [=-128]+[2^7]-1  [=+127]16-[2^15] [=-32,768]+[2^15]-1 [=+32,767]32-[2^31] [=-2,147,483,648]+[2^31]-1 [=+2,147,483,647][9+ digits]64-[2^63] [=-9,223,372,036,854,775,808]+[2^63]-1 [=+9,223,372,036,854,775,807][18+ digits]

Decoding 2's Complement Numbers

  1. Check the sign bit [denoted as
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08]
  2. If
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09, the number is positive and its absolute value is the binary value of the remaining n-1 bits
  3. If
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    10, the number is negative. you could "invert the n-1 bits and plus 1" to get the absolute value of negative number
    Alternatively, you could scan the remaining n-1 bits from the right [least-significant bit]. Look for the first occurrence of 1. Flip all the bits to the left of that first occurrence of 1. The flipped pattern gives the absolute value. For example,
    10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
    6

Big Endian vs. Little Endian

Modern computers store one byte of data in each memory address or location, i. e. , byte addressable memory. An 32-bit integer is, therefore, stored in 4 memory addresses

The term"Endian" refers to the order of storing bytes in computer memory. Trong sơ đồ "Big Endian", byte quan trọng nhất được lưu trữ đầu tiên trong địa chỉ bộ nhớ thấp nhất [hoặc lớn trước], trong khi "Little Endian" lưu trữ các byte ít quan trọng nhất trong địa chỉ bộ nhớ thấp nhất

Ví dụ: số nguyên 32 bit 12345678H [30541989610] được lưu dưới dạng 12H 34H 56H 78H trong big endian; . Một số nguyên 16 bit 00H 01H được hiểu là 0001H trong big endian và 0100H là little endian

Bài tập [Biểu diễn số nguyên]

  1. Phạm vi của số nguyên 8 bit, 16 bit, 32 bit và 64 bit, trong biểu diễn "không dấu" và "đã ký" là gì?
  2. Đưa ra giá trị của
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    11,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    5,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    6,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    14 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    15 đại diện không dấu trong 8 bit
  3. Đưa ra giá trị của
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    16,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    17 ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    18,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    5,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    20,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    00 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    01 trong biểu diễn có chữ ký của phần bù 8 bit 2
  4. Đưa ra giá trị của
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    16,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    17 ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    18,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    5,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    20,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    28 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    01 trong biểu diễn độ lớn dấu 8 bit
  5. Đưa ra giá trị của
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    16,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    17 ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    18,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    5,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    20,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    28 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    01 trong biểu diễn phần bù 1 8 bit
  6. [TODO] thêm
câu trả lời
  1. Phạm vi của các số nguyên n-bit không dấu là
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    37. Phạm vi của số nguyên có dấu bổ sung của n-bit 2 là
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    38;
  2. A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    39,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    40,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    41,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    42,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    43
  3. A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    44,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    45,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    46,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    40,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    48,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    49,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    50
  4. A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    44,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    52,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    53,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    54,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    48,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    56,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    50
  5. A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    44,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    59,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    60,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    61,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    48,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    63,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    50

Biểu diễn số dấu phẩy động

Số dấu phẩy động [hoặc số thực] có thể đại diện cho một giá trị rất lớn [

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
65] hoặc rất nhỏ [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
66]. Nó cũng có thể đại diện cho số âm rất lớn [_______0_______67] và số âm rất nhỏ [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
67], cũng như số 0, như minh họa

Một số dấu phẩy động thường được thể hiện trong ký hiệu khoa học, với một phân số [

A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
4] và một số mũ [
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
3] của một cơ số nhất định [
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
7], ở dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
72. Số thập phân sử dụng cơ số là 10 [_______0_______73];

Representation of floating point number is not unique. Ví dụ: số

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
75 có thể được biểu diễn dưới dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
76,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
77,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
78, v.v. Phần phân số có thể được chuẩn hóa. In the normalized form, there is only a single non-zero digit before the radix point. Ví dụ: số thập phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
79 có thể được chuẩn hóa thành
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
80;

Điều quan trọng cần lưu ý là các số dấu phẩy động bị mất độ chính xác khi được biểu diễn bằng một số bit cố định [e. g. , 32-bit hoặc 64-bit]. Điều này là do có vô số số thực [ngay cả trong một phạm vi nhỏ nói 0. 0 đến 0. 1]. Mặt khác, một mẫu nhị phân n-bit có thể biểu thị một số hữu hạn

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
02 khác biệt. Do đó, không phải tất cả các số thực đều có thể được biểu diễn. Thay vào đó, giá trị gần đúng nhất sẽ được sử dụng, dẫn đến mất độ chính xác

Cũng cần lưu ý rằng số học số thực kém hiệu quả hơn nhiều so với số học số nguyên. Nó có thể được tăng tốc với cái gọi là bộ đồng xử lý dấu phẩy động chuyên dụng. Do đó, hãy sử dụng số nguyên nếu ứng dụng của bạn không yêu cầu số dấu phẩy động

Trong máy tính, các số dấu phẩy động được biểu diễn dưới dạng ký hiệu khoa học của phân số [

A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
4] và số mũ [
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
3] với cơ số là 2, ở dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
74. Cả
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
3 và
A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
4 đều có thể tích cực cũng như tiêu cực. Modern computers adopt IEEE 754 standard for representing floating-point numbers. There are two representation schemes. 32-bit single-precision and 64-bit double-precision

IEEE-754 32-bit Single-Precision Floating-Point Numbers

In 32-bit single-precision floating-point representation

  • The most significant bit is the sign bit [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08], with 0 for positive numbers and 1 for negative numbers
  • The following 8 bits represent exponent [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    3]
  • The remaining 23 bits represents fraction [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    4]
Normalized Form

Let's illustrate with an example, suppose that the 32-bit pattern is

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
92, with

  • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    93
  • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    94
  • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    95

In the normalized form, the actual fraction is normalized with an implicit leading 1 in the form of

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
96. In this example, the actual fraction is
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
97

The sign bit represents the sign of the number, with

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
09 for positive and
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10 for negative number. In this example with
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10, this is a negative number, i. e. ,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
01

In normalized form, the actual exponent is

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
02 [so-called excess-127 or bias-127]. This is because we need to represent both positive and negative exponent. With an 8-bit E, ranging from 0 to 255, the excess-127 scheme could provide actual exponent of -127 to 128. In this example,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
03

Hence, the number represented is

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
04

De-Normalized Form

Normalized form has a serious problem, with an implicit leading 1 for the fraction, it cannot represent the number zero. Convince yourself on this

De-normalized form was devised to represent zero and other numbers

For

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05, the numbers are in the de-normalized form. An implicit leading 0 [instead of 1] is used for the fraction; and the actual exponent is always
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
06. Hence, the number zero can be represented with
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05 and
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
08 [because
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
09]

We can also represent very small positive and negative numbers in de-normalized form with

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05. For example, if
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05, and
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
13. The actual fraction is
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
14. Since
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10, it is a negative number. With
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05, the actual exponent is
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
06. Hence the number is
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
18, which is an extremely small negative number [close to zero]

Summary

In summary, the value [

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
19] is calculated as follows

  • For
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    20. These numbers are in the so-called normalized form. The sign-bit represents the sign of the number. Fractional part [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    96] are normalized with an implicit leading 1. The exponent is bias [or in excess] of
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    14, so as to represent both positive and negative exponent. The range of exponent is
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    06 to
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    01
  • For
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    25. These numbers are in the so-called denormalized form. The exponent of
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    26 evaluates to a very small number. Denormalized form is needed to represent zero [with
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08 and
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    05]. It can also represents very small positive and negative number close to zero
  • For
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    29, it represents special values, such as
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    30 [positive and negative infinity] and
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    31 [not a number]. This is beyond the scope of this article

Example 1. Suppose that IEEE-754 32-bit floating-point representation pattern is

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
32

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
7

Example 2. Suppose that IEEE-754 32-bit floating-point representation pattern is

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
33

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
8

ví dụ 3. Giả sử rằng mẫu biểu diễn dấu phẩy động 32-bit IEEE-754 là

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
34

10110B = 10000B + 0000B + 100B + 10B + 0B = 1×2^4 + 0×2^3 + 1×2^2 + 1×2^1 + 0×2^0
9

Ví dụ 4 [Dạng khử chuẩn hóa]. Giả sử rằng mẫu biểu diễn dấu phẩy động 32-bit IEEE-754 là

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
35

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
0

Bài tập [Số dấu phẩy động]

  1. Tính toán các số dương lớn nhất và nhỏ nhất có thể được biểu diễn ở dạng chuẩn hóa 32 bit
  2. Tính toán các số âm lớn nhất và nhỏ nhất có thể được biểu diễn ở dạng chuẩn hóa 32 bit
  3. Lặp lại [1] cho dạng không chuẩn hóa 32 bit
  4. Lặp lại [2] cho dạng không chuẩn hóa 32 bit
gợi ý
  1. Số dương lớn nhất.
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    37,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    38
    Số dương nhỏ nhất.
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    40,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    41
  2. Tương tự như trên, nhưng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    10
  3. Số dương lớn nhất.
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    05,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    38
    Số dương nhỏ nhất.
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    05,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    48
  4. Tương tự như trên, nhưng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    10
Ghi chú cho người dùng Java

Bạn có thể sử dụng các phương thức JDK

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
50 hoặc
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
51 để tạo một 32-bit
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
52 có độ chính xác đơn hoặc 64-bit
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
53 có độ chính xác kép với các mẫu bit cụ thể và in các giá trị của chúng. Ví dụ như,

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
1

Số dấu phẩy động chính xác kép 64 bit IEEE-754

Sơ đồ biểu diễn cho độ chính xác kép 64 bit tương tự như độ chính xác đơn 32 bit

  • The most significant bit is the sign bit [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08], with 0 for positive numbers and 1 for negative numbers
  • 11 bit sau đại diện cho số mũ [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    3]
  • 52 bit còn lại đại diện cho phân số [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    4]

Giá trị [

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
19] được tính như sau

  • Normalized form. Cho
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    58
  • dạng không chuẩn hóa. Cho
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    59. Đây là ở dạng không chuẩn hóa
  • Đối với
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    60,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    19 đại diện cho các giá trị đặc biệt, chẳng hạn như
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    30 [vô cùng],
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    31 [không phải là số]

Tìm hiểu thêm về biểu diễn dấu phẩy động

Có ba phần trong biểu diễn dấu phẩy động

  • Bit dấu [_______0_______08] là dễ hiểu [0 cho số dương và 1 cho số âm]
  • Đối với số mũ [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    3], cái gọi là sai lệch [hoặc thừa] được áp dụng để biểu diễn cả số mũ dương và âm. Độ lệch được đặt ở một nửa phạm vi. Đối với độ chính xác đơn với số mũ 8 bit, độ lệch là 127 [hoặc vượt quá 127]. Đối với độ chính xác kép với số mũ 11 bit, độ lệch là 1023 [hoặc vượt quá 1023]
  • Phân số [
    A1C2H = 10×16^3 + 1×16^2 + 12×16^1 + 2 = 41410 [base 10]
    10110B = 1×2^4 + 1×2^2 + 1×2^1 = 22 [base 10]
    4] [còn được gọi là phần định trị hoặc ý nghĩa] bao gồm một bit dẫn đầu ẩn [trước điểm cơ số] và các bit phân số [sau điểm cơ số]. Bit hàng đầu cho các số được chuẩn hóa là 1;
Số dấu phẩy động được chuẩn hóa

Ở dạng chuẩn hóa, điểm cơ số được đặt sau chữ số khác 0 đầu tiên, e, g. ,

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
67,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
68. Đối với số nhị phân, bit đầu tiên luôn là 1 và không cần biểu diễn rõ ràng - điều này giúp tiết kiệm 1 bit dung lượng lưu trữ

Ở dạng chuẩn hóa của IEEE 754

  • Đối với độ chính xác đơn,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    69 vượt quá 127. Do đó, số mũ thực tế là từ
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    06 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    01. Số mũ âm được sử dụng để biểu diễn các số nhỏ [< 1. 0]; . 0]
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    72
  • Đối với độ chính xác kép,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    73 vượt quá 1023. Số mũ thực tế là từ
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    74 đến
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    75, và
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    76

Lưu ý rằng mẫu n-bit có số lượng kết hợp hữu hạn [_______5_______77], có thể biểu thị các số phân biệt hữu hạn. Không thể biểu diễn các số vô hạn trong trục thực [ngay cả một phạm vi nhỏ cũng nói 0. 0 đến 1. 0 có vô số]. Nghĩa là, không phải tất cả các số dấu phẩy động đều có thể được biểu diễn chính xác. Thay vào đó, giá trị gần đúng nhất được sử dụng, dẫn đến mất độ chính xác

Các số dấu phẩy động chuẩn hóa tối thiểu và tối đa là

Độ chính xácChuẩn hóa N[tối thiểu]NChuẩn hóa[tối đa]Đơn0080 0000H
0 00000001 00000000000000000000000B
E = 1, F = 0
N[tối thiểu] = 1. 0B × 2^-126
[≈1. 17549435 × 10^-38]7F7F FFFFH
0 11111110 00000000000000000000000B
E = 254, F = 0
N[tối đa] = 1. 1. 1B × 2^127 = [2 - 2^-23] × 2^127
[≈3. 4028235 × 10^38]Gấp đôi0010 0000 0000 0000H
N[tối thiểu] = 1. 0B × 2^-1022
[≈2. 2250738585072014 × 10^-308]7FEF FFFF FFFF FFFFH
N[tối đa] = 1. 1. 1B × 2^1023 = [2 - 2^-52] × 2^1023
[≈1. 7976931348623157 × 10^308]
Số dấu phẩy động không chuẩn hóa

Nếu

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
78, nhưng phân số khác 0, thì giá trị ở dạng không chuẩn hóa và bit đứng đầu bằng 0 được giả định, như sau

  • Đối với độ chính xác đơn,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    78,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    80
  • Đối với độ chính xác kép,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    78,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    82

Denormalized form can represent very small numbers closed to zero, and zero, which cannot be represented in normalized form, as shown in the above figure

Tối thiểu và tối đa của các số dấu phẩy động không chuẩn hóa là

Chính xácKhông chuẩn hóa D[tối thiểu]Không chuẩn hóa D[tối đa]Đơn0000 0001H
0 00000000 00000000000000000000001B
E = 0, F = 00000000000000000000001B
D[min] = 0. 0. 1 × 2^-126 = 1 × 2^-23 × 2^-126 = 2^-149
[≈1. 4 × 10^-45]007F FFFFH
0 00000000 11111111111111111111111B
E = 0, F = 11111111111111111111111B
D[max] = 0. 1. 1 × 2^-126 = [1-2^-23]×2^-126
[≈1. 1754942 × 10^-38]Double0000 0000 0000 0001H
D[min] = 0. 0. 1 × 2^-1022 = 1 × 2^-52 × 2^-1022 = 2^-1074
[≈4. 9 × 10^-324]001F FFFF FFFF FFFFH
D[max] = 0. 1. 1 × 2^-1022 = [1-2^-52]×2^-1022
[≈4. 4501477170144023 × 10^-308]Special Values

Số không. Số không không thể được biểu diễn ở dạng chuẩn hóa và phải được biểu diễn ở dạng không chuẩn hóa với

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05 và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
08. Có hai cách biểu diễn cho số 0.
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
85 với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
09 và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
87 với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10

vô cực. Giá trị của +vô cực [e. g. ,

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
89] và -infinity [e. g. ,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
90] được biểu diễn bằng số mũ của tất cả 1 [_______5_______29 cho độ chính xác đơn và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
60 cho độ chính xác kép],
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
08 và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
09 [cho
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
95] và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10 [cho
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
97]

Không phải là số [NaN].

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
31 biểu thị một giá trị không thể được biểu diễn dưới dạng số thực [e. g.
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
99].
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
31 được biểu diễn bằng Số mũ của tất cả 1 [_______5_______29 cho độ chính xác đơn và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
60 cho độ chính xác kép] và bất kỳ phân số nào khác không

Mã hóa ký tự

Trong bộ nhớ máy tính, ký tự được "mã hóa" [hoặc "đại diện"] bằng cách sử dụng "lược đồ mã hóa ký tự" đã chọn [còn gọi là "bộ ký tự", "bộ ký tự", "bản đồ ký tự" hoặc "trang mã"]

Ví dụ: trong ASCII [cũng như Latin1, Unicode và nhiều bộ ký tự khác]

  • mã số
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    03 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    04 lần lượt đại diện cho
    To convert 261[base 10] to hexadecimal:
      261/16 => quotient=16 remainder=5
      16/16  => quotient=1  remainder=0
      1/16   => quotient=0  remainder=1 [quotient=0 stop]
      Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
    3 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    06
  • mã số
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    07 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    08 lần lượt đại diện cho
    To convert 261[base 10] to hexadecimal:
      261/16 => quotient=16 remainder=5
      16/16  => quotient=1  remainder=0
      1/16   => quotient=0  remainder=1 [quotient=0 stop]
      Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
    1 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    10
  • mã số
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    11 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    12 lần lượt đại diện cho
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    13 đến
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    14

Điều quan trọng cần lưu ý là sơ đồ biểu diễn phải được biết trước khi có thể diễn giải một mẫu nhị phân. e. g. , the 8-bit pattern "

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
15" could represent anything under the sun known only to the person encoded it

Các sơ đồ mã hóa ký tự được sử dụng phổ biến nhất là. 7-bit ASCII [ISO/IEC 646] và 8-bit Latin-x [ISO/IEC 8859-x] cho các ký tự Tây Âu và Unicode [ISO/IEC 10646] để quốc tế hóa [i18n]

Sơ đồ mã hóa 7 bit [chẳng hạn như ASCII] có thể biểu thị 128 ký tự và ký hiệu. Sơ đồ mã hóa ký tự 8 bit [chẳng hạn như Latin-x] có thể biểu thị 256 ký tự và ký hiệu;

Mã ASCII 7 bit [còn gọi là US-ASCII, ISO/IEC 646, ITU-T T. 50]

  • ASCII [Mã tiêu chuẩn Mỹ để trao đổi thông tin] là một trong những sơ đồ mã hóa ký tự trước đó
  • ASCII ban đầu là mã 7 bit. Nó đã được mở rộng thành 8 bit để sử dụng tốt hơn tổ chức bộ nhớ máy tính 8 bit. [Bit thứ 8 ban đầu được sử dụng để kiểm tra tính chẵn lẻ trong các máy tính đời đầu. ]
  • Code numbers
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    16 to
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    17 are printable [displayable] characters as tabulated [arranged in hexadecimal and decimal] as follows:Hex0123456789ABCDEF2SP!"#$%&'[]*+,-./30123456789:;?4@ABCDEFGHIJKLMNO5PQRSTUVWXYZ[\]^_6`abcdefghijklmno7pqrstuvwxyz{|}~
    Dec01234567893SP!"#$%&'4[]*+,-./01523456789:;6?@ABCDE7FGHIJKLMNO8PQRSTUVWXY9Z[\]^_`abc10defghijklm11nopqrstuvw12xyz{|}~
    • Code number
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      16 is the blank or space character
    • 1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      13 to
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      14.
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      21 or
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      22 where
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      23 is the equivalent integer value
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      24
    • To convert 261[base 10] to hexadecimal:
        261/16 => quotient=16 remainder=5
        16/16  => quotient=1  remainder=0
        1/16   => quotient=0  remainder=1 [quotient=0 stop]
        Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
      3 to
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      06.
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      27 or
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      28.
      To convert 261[base 10] to hexadecimal:
        261/16 => quotient=16 remainder=5
        16/16  => quotient=1  remainder=0
        1/16   => quotient=0  remainder=1 [quotient=0 stop]
        Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
      3 to
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      06 are continuous without gap
    • To convert 261[base 10] to hexadecimal:
        261/16 => quotient=16 remainder=5
        16/16  => quotient=1  remainder=0
        1/16   => quotient=0  remainder=1 [quotient=0 stop]
        Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
      1 to
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      10.
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      33 or
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      34.
      To convert 261[base 10] to hexadecimal:
        261/16 => quotient=16 remainder=5
        16/16  => quotient=1  remainder=0
        1/16   => quotient=0  remainder=1 [quotient=0 stop]
        Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
      3 to
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      06 are also continuous without gap. However, there is a gap between uppercase and lowercase letters. To convert between upper and lowercase, flip the value of bit-5
  • Code numbers
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    37 to
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    38, and
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    39 are special control characters, which are non-printable [non-displayable], as tabulated below. Many of these characters were used in the early days for transmission control [e. g. , STX, ETX] and printer control [e. g. , Form-Feed], which are now obsolete. The remaining meaningful codes today are
    • 1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      40 for Tab [
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      41]
    • 1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      42 for Line-Feed or newline [LF or
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      43] and
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      44 for Carriage-Return [CR or
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      45], which are used as line delimiter [aka line separator, end-of-line] for text files. There is unfortunately no standard for line delimiter. Unixes and Mac use
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      42 [LF or "
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      47"], Windows use
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      48 [CR+LF or "
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      49"]. Programming languages such as C/C++/Java [which was created on Unix] use
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      42 [LF or "
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      47"]
    • In programming languages such as C/C++/Java, line-feed [
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      42] is denoted as
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      43, carriage-return [
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      44] as
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      55, tab [
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      40] as
      1001001010B = 0010 0100 1010B = 24AH
      10001011001011B = 0010 0010 1100 1011B = 22CBH
      41
DECHEXMeaningDECHEXMeaning000NULNull1711DC1Device Control 1101SOHStart of Heading1812DC2Device Control 2202STXStart of Text1913DC3Device Control 3303ETXEnd of Text2014DC4Device Control 4404EOTEnd of Transmission2115NAKNegative Ack. 505ENQEnquiry2216SYNSync. Idle606ACKAcknowledgment2317ETBEnd of Transmission707BELBell2418CANCancel808BSBack Space
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
582519EMEnd of Medium909HTHorizontal Tab
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
41261ASUBSubstitute100ALFLine Feed
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
43271BESCEscape110BVTVertical Feed281CIS4File Separator120CFFForm Feed
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
2291DIS3Group Separator130DCRCarriage Return
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
55301EIS2Record Separator140ESOShift Out311FIS1Unit Separator150FSIShift In1610DLEDatalink Escape1277FDELDelete

8-bit Latin-1 [aka ISO/IEC 8859-1]

ISO/IEC-8859 is a collection of 8-bit character encoding standards for the western languages

ISO/IEC 8859-1, aka Latin alphabet No. 1, or Latin-1 in short, is the most commonly-used encoding scheme for western european languages. It has 191 printable characters from the latin script, which covers languages like English, German, Italian, Portuguese and Spanish. Latin-1 is backward compatible with the 7-bit US-ASCII code. That is, the first 128 characters in Latin-1 [code numbers 0 to 127 [7FH]], is the same as US-ASCII. Code numbers 128 [80H] to 159 [9FH] are not assigned. Code numbers 160 [A0H] to 255 [FFH] are given as follows

Hex0123456789ABCDEFANBSP¡¢£¤¥¦§¨©ª«¬SHY®¯B°±²³´µ¶·¸¹º»¼½¾¿CÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏDÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßEàáâãäåæçèéêëìíîïFðñòóôõö÷øùúûüýþÿ

ISO/IEC-8859 has 16 parts. Besides the most commonly-used Part 1, Part 2 is meant for Central European [Polish, Czech, Hungarian, etc], Part 3 for South European [Turkish, etc], Part 4 for North European [Estonian, Latvian, etc], Part 5 for Cyrillic, Part 6 for Arabic, Part 7 for Greek, Part 8 for Hebrew, Part 9 for Turkish, Part 10 for Nordic, Part 11 for Thai, Part 12 was abandon, Part 13 for Baltic Rim, Part 14 for Celtic, Part 15 for French, Finnish, etc. Part 16 for South-Eastern European

Other 8-bit Extension of US-ASCII [ASCII Extensions]

Beside the standardized ISO-8859-x, there are many 8-bit ASCII extensions, which are not compatible with each others

ANSI [American National Standards Institute] [aka Windows-1252, or Windows Codepage 1252]. for Latin alphabets used in the legacy DOS/Windows systems. It is a superset of ISO-8859-1 with code numbers 128 [80H] to 159 [9FH] assigned to displayable characters, such as "smart" single-quotes and double-quotes. A common problem in web browsers is that all the quotes and apostrophes [produced by "smart quotes" in some Microsoft software] were replaced with question marks or some strange symbols. Đó là vì tài liệu được gắn nhãn là ISO-8859-1 [thay vì Windows-1252], trong đó các số mã này không được xác định. Hầu hết các trình duyệt và ứng dụng email hiện đại coi bộ ký tự ISO-8859-1 là Windows-1252 để phù hợp với việc ghi nhãn sai như vậy

Hex0123456789ABCDEF8€‚ƒ„…†‡ˆ‰Š‹ŒŽ9''“”•–—™š›œžŸ

EBCDIC [Mã trao đổi thập phân được mã hóa nhị phân mở rộng]. Được sử dụng trong các máy tính IBM đời đầu

Unicode [còn gọi là Bộ ký tự chung ISO/IEC 10646]

Trước Unicode, không có sơ đồ mã hóa ký tự đơn nào có thể biểu thị các ký tự trong tất cả các ngôn ngữ. Ví dụ: Tây Âu sử dụng một số sơ đồ mã hóa [trong họ ISO-8859-x]. Ngay cả một ngôn ngữ đơn lẻ như tiếng Trung Quốc cũng có một vài lược đồ mã hóa [GB2312/GBK, BIG5]. Nhiều lược đồ mã hóa xung đột với nhau, tôi. e. , cùng một mã số được gán cho các ký tự khác nhau

Unicode nhằm mục đích cung cấp một sơ đồ mã hóa ký tự tiêu chuẩn, phổ biến, hiệu quả, thống nhất và rõ ràng. Tiêu chuẩn Unicode được duy trì bởi một tổ chức phi lợi nhuận có tên Unicode Consortium [@ www. unicode. tổ chức]. Unicode là tiêu chuẩn ISO/IEC 10646

Unicode tương thích ngược với 7-bit US-ASCII và 8-bit Latin-1 [ISO-8859-1]. Nghĩa là, 128 ký tự đầu tiên giống như US-ASCII;

Unicode ban đầu sử dụng 16 bit [được gọi là UCS-2 hoặc Bộ ký tự Unicode - 2 byte], có thể biểu thị tối đa 65.536 ký tự. Kể từ đó, nó đã được mở rộng lên hơn 16 bit, hiện tại là 21 bit. Phạm vi mã hợp pháp trong ISO/IEC 10646 hiện là từ U+0000H đến U+10FFFFH [21 bit hoặc khoảng 2 triệu ký tự], bao gồm tất cả các chữ viết lịch sử hiện tại và cổ đại. Phạm vi 16 bit ban đầu từ U+0000H đến U+FFFFH [65536 ký tự] được gọi là Mặt phẳng đa ngôn ngữ cơ bản [BMP], bao gồm tất cả các ngôn ngữ chính đang được sử dụng hiện nay. Các ký tự bên ngoài BMP được gọi là Ký tự phụ, không được sử dụng thường xuyên

Unicode có hai lược đồ mã hóa

  • UCS-2 [Bộ ký tự chung - 2 byte]. Sử dụng 2 byte [16 bit], bao gồm 65.536 ký tự trong BMP. BMP là đủ cho hầu hết các ứng dụng. UCS-2 hiện đã lỗi thời
  • UCS-4 [Bộ ký tự chung - 4 byte]. Sử dụng 4 byte [32 bit], bao gồm BMP và các ký tự bổ sung

UTF-8 [Định dạng chuyển đổi Unicode - 8-bit]

Unicode 16/32-bit [UCS-2/4] hoàn toàn không hiệu quả nếu tài liệu chủ yếu chứa các ký tự ASCII, vì mỗi ký tự chiếm hai byte dung lượng lưu trữ. Các sơ đồ mã hóa có độ dài thay đổi, chẳng hạn như UTF-8, sử dụng 1-4 byte để biểu thị một ký tự, được phát minh ra để cải thiện hiệu quả. Trong UTF-8, 128 ký tự US-ASCII thường được sử dụng chỉ sử dụng 1 byte, nhưng một số ký tự ít phổ biến hơn có thể yêu cầu tới 4 byte. Nhìn chung, hiệu quả được cải thiện đối với tài liệu chứa chủ yếu là văn bản US-ASCII

Việc chuyển đổi giữa Unicode và UTF-8 như sau

BitsUnicode Mã UTF-8Bytes700000000 0xxxxxxx0xxxxxxx1 [ASCII]1100000yyy yyxxxxxx110yyyyy 10xxxxxx216zzzzyyyy yyxxxxxx1110zzzz 10yyyyyy 10xxxxxx321000uuuuu zzzzyyyy yyxxxxxx1110zzzz 10yyyyyy 10xxxxxx321000uuuuu zzzzyyyy yyxxxxxx11110yzzyuu 10xxxx

Trong UTF-8, các số Unicode tương ứng với các ký tự ASCII 7 bit được đệm bằng số 0 đứng đầu; . Do đó, UTF-8 có thể được sử dụng với tất cả các phần mềm sử dụng ASCII. Các số Unicode từ 128 trở lên, ít được sử dụng hơn, được mã hóa bằng nhiều byte hơn [2-4 byte]. UTF-8 thường yêu cầu ít bộ nhớ hơn và tương thích với ASCII. Hạn chế của UTF-8 là cần nhiều sức mạnh xử lý hơn để giải nén mã do độ dài thay đổi của nó. UTF-8 là định dạng phổ biến nhất cho Unicode

ghi chú

  • UTF-8 sử dụng 1-3 byte cho các ký tự trong BMP [16-bit] và 4 byte cho các ký tự bổ sung bên ngoài BMP [21-bit]
  • 128 ký tự ASCII [chữ cái Latinh cơ bản, chữ số và dấu chấm câu] sử dụng một byte. Hầu hết các ký tự Châu Âu và Trung Đông sử dụng chuỗi 2 byte, bao gồm các chữ cái Latinh mở rộng [có dấu ngã, macron, cấp tính, nghiêm trọng và các dấu khác], tiếng Hy Lạp, tiếng Armenia, tiếng Do Thái, tiếng Ả Rập và các ký tự khác. Tiếng Trung, tiếng Nhật và tiếng Hàn [CJK] sử dụng chuỗi ba byte
  • Tất cả các byte, ngoại trừ 128 ký tự ASCII, có một bit
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    63 ở đầu. In other words, the ASCII bytes, with a leading
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    13 bit, can be identified and decoded easily

Thí dụ. 您好

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
65

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
2

UTF-16 [Định dạng chuyển đổi Unicode - 16-bit]

UTF-16 là lược đồ mã hóa ký tự Unicode có độ dài thay đổi, sử dụng từ 2 đến 4 byte. UTF-16 không được sử dụng phổ biến. Bảng biến đổi như sau

UnicodeUTF-16 CodeBytesxxxxxxxx xxxxxxxxGiống như UCS-2 - không mã hóa2000uuuuu zzzzyyyy yyxxxxxx
[uuuuu≠0]110110ww wwzzzzyy 110111yy yyxxxxxx
[www = uuu - 1]4

Xin lưu ý rằng đối với 65536 ký tự trong BMP, UTF-16 giống với UCS-2 [2 byte]. Tuy nhiên, 4 byte được sử dụng cho các ký tự bổ sung bên ngoài BMP

Đối với các ký tự BMP, UTF-16 giống như UCS-2. Đối với các ký tự bổ sung, mỗi ký tự yêu cầu một cặp giá trị 16 bit, giá trị đầu tiên từ phạm vi ký tự thay thế cao, [

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
66], ký tự thứ hai từ phạm vi ký tự thay thế thấp [
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
67]

UTF-32 [Định dạng chuyển đổi Unicode - 32-bit]

Giống như UCS-4, sử dụng 4 byte cho mỗi ký tự - không được mã hóa

Các định dạng của Multi-Byte [e. g. , Unicode] Tệp văn bản

Độ bền [theo thứ tự byte]. Đối với một ký tự nhiều byte, bạn cần quan tâm đến thứ tự của các byte trong bộ nhớ. Trong big endian, byte quan trọng nhất được lưu trữ tại vị trí bộ nhớ có địa chỉ thấp nhất [byte lớn trước]. Trong little endian, byte quan trọng nhất được lưu trữ tại vị trí bộ nhớ có địa chỉ cao nhất [byte nhỏ trước]. Ví dụ: 您 [với số Unicode là

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
68] được lưu dưới dạng
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
69 trong big endian; . Big endian, tạo ra kết xuất hex dễ đọc hơn, được sử dụng phổ biến hơn và thường là mặc định

BOM [Dấu thứ tự byte]. BOM là một ký tự Unicode đặc biệt có mã số là

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
71, dùng để phân biệt big endian và little endian. Đối với big-endian, BOM xuất hiện dưới dạng
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
72 trong kho lưu trữ. Đối với little-endian, BOM xuất hiện dưới dạng
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
73. Unicode dự trữ hai số mã này để tránh bị trùng với ký tự khác

Các tệp văn bản Unicode có thể có các định dạng này

  • Big Endian. UCS-2BE, UTF-16BE, UTF-32BE
  • Little Endian. UCS-2LE, UTF-16LE, UTF-32LE
  • UTF-16 với BOM. Ký tự đầu tiên của tệp là ký tự BOM, ký tự này chỉ định độ cuối. Đối với big-endian, BOM xuất hiện dưới dạng
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    72 trong kho lưu trữ. Đối với little-endian, BOM xuất hiện dưới dạng
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    73

Tệp UTF-8 luôn được lưu trữ dưới dạng big endian. BOM không đóng vai trò gì. Tuy nhiên, trong một số hệ thống [cụ thể là Windows], BOM được thêm làm ký tự đầu tiên trong tệp UTF-8 làm chữ ký để nhận dạng tệp dưới dạng mã hóa UTF-8. Ký tự BOM [

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
71] được mã hóa bằng UTF-8 thành
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
77. Không nên thêm BOM làm ký tự đầu tiên của tệp vì nó có thể bị hiểu sai trong hệ thống khác. Bạn có thể có tệp UTF-8 mà không cần BOM

Định dạng của tệp văn bản

Dấu phân cách dòng hoặc cuối dòng [EOL]. Đôi khi, khi bạn sử dụng Windows NotePad để mở một tệp văn bản [được tạo trong Unix hoặc Mac], tất cả các dòng được nối với nhau. Điều này là do các nền tảng điều hành khác nhau sử dụng ký tự khác nhau làm cái gọi là dấu phân cách dòng [hoặc cuối dòng hoặc EOL]. Hai ký tự điều khiển không in được có liên quan.

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
42 [Line-Feed hoặc LF] và
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
44 [Vận chuyển-Trả về hoặc CR]

  • Windows/DOS sử dụng
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    80 [CR+LF hoặc "
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    49"] làm EOL
  • Unix và Mac chỉ sử dụng
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    42 [LF hoặc "
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    47"]

Cuối Tệp [EOF]. [LÀM]

Trang mã CMD của Windows

Lược đồ mã hóa ký tự [bộ ký tự] trong Windows được gọi là codepage. Trong trình bao CMD, bạn có thể ra lệnh

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
84 để hiển thị bảng mã hiện tại hoặc
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
85 để thay đổi bảng mã

lưu ý rằng

  • Bảng mã mặc định 437 [được sử dụng trong DOS gốc] là một bộ ký tự 8 bit có tên là ASCII mở rộng, khác với Latin-1 cho các số mã trên 127
  • Codepage 1252 [Windows-1252], không hoàn toàn giống với Latin-1. Nó gán mã số 80H đến 9FH cho các chữ cái và dấu chấm câu, chẳng hạn như dấu ngoặc đơn thông minh và dấu ngoặc kép. Một vấn đề phổ biến trong trình duyệt hiển thị dấu ngoặc kép và dấu nháy đơn trong dấu chấm hỏi hoặc hộp là do trang được cho là Windows-1252 nhưng lại bị dán nhãn sai thành ISO-8859-1
  • Để quốc tế hóa và bộ ký tự tiếng Trung. bảng mã 65001 cho UTF8, bảng mã 1201 cho UCS-2BE, bảng mã 1200 cho UCS-2LE, bảng mã 936 cho các ký tự tiếng Trung trong GB2312, bảng mã 950 cho các ký tự tiếng Trung trong Big5

Bộ chữ Hán

Unicode hỗ trợ tất cả các ngôn ngữ, kể cả các ngôn ngữ châu Á như tiếng Trung [cả chữ giản thể và phồn thể], tiếng Nhật và tiếng Hàn [gọi chung là CJK]. Có hơn 20.000 ký tự CJK trong Unicode. Các ký tự Unicode thường được mã hóa theo sơ đồ UTF-8, thật không may, yêu cầu 3 byte cho mỗi ký tự CJK, thay vì 2 byte trong UCS-2 [UTF-16] không được mã hóa

Tệ hơn nữa, còn có nhiều bộ chữ Trung Quốc khác nhau, không tương thích với Unicode

  • GB2312/GBK. đối với chữ Hán giản thể. GB2312 sử dụng 2 byte cho mỗi ký tự tiếng Trung. Bit quan trọng nhất [MSB] của cả hai byte được đặt thành 1 để cùng tồn tại với ASCII 7 bit với MSB là 0. Có khoảng 6700 ký tự. GBK là phần mở rộng của GB2312, bao gồm nhiều ký tự hơn cũng như các ký tự tiếng Trung phồn thể
  • 5 LỚN. đối với các ký tự tiếng Trung phồn thể, BIG5 cũng sử dụng 2 byte cho mỗi ký tự tiếng Trung. Bit quan trọng nhất của cả hai byte cũng được đặt thành 1. BIG5 không tương thích với GBK, tôi. e. , the same code number is assigned to different character

Ví dụ, thế giới trở nên thú vị hơn với nhiều tiêu chuẩn này

StandardCharactersCodesSimplifiedGB2312和谐BACD  D0B3UCS-2和谐548C  8C10UTF-8和谐E5928C  E8B090TraditionalBIG5和諧A94D  BFD3UCS-2和諧548C  8AE7UTF-8和諧E5928C  E8ABA7

Ghi chú cho người dùng CMD của Windows. Để hiển thị chính xác ký tự tiếng Trung trong shell CMD, bạn cần chọn đúng bảng mã, e. g. , 65001 cho UTF8, 936 cho GB2312/GBK, 950 cho Big5, 1201 cho UCS-2BE, 1200 cho UCS-2LE, 437 cho DOS gốc. Bạn có thể sử dụng lệnh "

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
86" để hiển thị trang mã hiện tại và lệnh "
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
87" để thay đổi trang mã. Bạn cũng phải chọn một phông chữ có thể hiển thị các ký tự [e. g. , Courier New, Consolas hoặc Lucida Console, KHÔNG phải phông chữ Raster]

Trình tự đối chiếu [đối với nhân vật xếp hạng]

Một chuỗi bao gồm một dãy các ký tự viết hoa hoặc viết thường, e. g. ,

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
88,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
89,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
90. Khi sắp xếp hoặc so sánh các chuỗi, nếu chúng ta sắp xếp các ký tự theo các số mã bên dưới [e. g. , US-ASCII] theo từng ký tự, thứ tự ví dụ sẽ là
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
89,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
88,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
90 vì chữ in hoa có số mã nhỏ hơn chữ in thường. Điều này không phù hợp với cái gọi là thứ tự từ điển, trong đó các chữ hoa và chữ thường có cùng thứ hạng. Một vấn đề phổ biến khác trong việc sắp xếp chuỗi là
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
94 [mười] lần được sắp xếp trước
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
95 đến
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
96

Do đó, khi sắp xếp hoặc so sánh các chuỗi, cái gọi là chuỗi đối chiếu [hoặc đối chiếu] thường được xác định, chỉ định thứ hạng cho các chữ cái [chữ hoa, chữ thường], số và ký hiệu đặc biệt. Có nhiều trình tự đối chiếu có sẵn. Việc chọn trình tự đối chiếu hoàn toàn tùy thuộc vào bạn để đáp ứng các yêu cầu cụ thể của ứng dụng của bạn. Một số trình tự đối chiếu thứ tự từ điển không phân biệt chữ hoa chữ thường có cùng thứ hạng cho cùng một chữ hoa và chữ thường, i. e. ,

To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
3,
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
1 ⇒
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
99,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
00 ⇒. ⇒
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
06,
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
10. Một số trình tự đối chiếu thứ tự từ điển phân biệt chữ hoa chữ thường đặt chữ cái viết hoa trước chữ cái viết thường của nó, i. e. ,
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
3 ⇒
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
99 ⇒
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
05. ⇒
To convert 261[base 10] to hexadecimal:
  261/16 => quotient=16 remainder=5
  16/16  => quotient=1  remainder=0
  1/16   => quotient=0  remainder=1 [quotient=0 stop]
  Hence, 261D = 105H [Collect the hex digits from the remainder in reverse order]
1 ⇒
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
07. Thông thường, khoảng trắng được xếp trước các chữ số
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
13 đến
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
14, theo sau là các bảng chữ cái

Trình tự đối chiếu thường phụ thuộc vào ngôn ngữ, vì các ngôn ngữ khác nhau sử dụng các bộ ký tự khác nhau [e. g. , á, é, a, α] có mệnh lệnh riêng

Dành cho Lập trình viên Java -
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
10

JDK 1. 4 đã giới thiệu gói

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
11 mới để hỗ trợ mã hóa/giải mã các ký tự từ UCS-2 được sử dụng nội bộ trong chương trình Java sang bất kỳ bộ ký tự được hỗ trợ nào được sử dụng bởi các thiết bị bên ngoài

Thí dụ. Chương trình sau mã hóa một số văn bản Unicode trong sơ đồ mã hóa khác nhau và hiển thị mã Hex của chuỗi byte được mã hóa

Dành cho Lập trình viên Java -
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
12 và
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
13

The

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
12 data type are based on the original 16-bit Unicode standard called UCS-2. The Unicode has since evolved to 21 bits, with code range of U+0000 to U+10FFFF. The set of characters from U+0000 to U+FFFF is known as the Basic Multilingual Plane [BMP]. Characters above U+FFFF are called supplementary characters. A 16-bit Java
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
12 cannot hold a supplementary character

Recall that in the UTF-16 encoding scheme, a BMP characters uses 2 bytes. It is the same as UCS-2. A supplementary character uses 4 bytes. and requires a pair of 16-bit values, the first from the high-surrogates range, [

1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
66], the second from the low-surrogates range [
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
67]

In Java, a

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
13 is a sequences of Unicode characters. Java, in fact, uses UTF-16 for
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
13 and
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
20. For BMP characters, they are the same as UCS-2. For supplementary characters, each characters requires a pair of
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
12 values

Java methods that accept a 16-bit

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
12 value does not support supplementary characters. Methods that accept a 32-bit
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
23 value support all Unicode characters [in the lower 21 bits], including supplementary characters

This is meant to be an academic discussion. I have yet to encounter the use of supplementary characters

Displaying Hex Values & Hex Editors

At times, you may need to display the hex values of a file, especially in dealing with Unicode characters. A Hex Editor is a handy tool that a good programmer should possess in his/her toolbox. There are many freeware/shareware Hex Editor available. Try google "Hex Editor"

I used the followings

  • NotePad++ with Hex Editor Plug-in. Open-source and free. You can toggle between Hex view and Normal view by pushing the "H" button
  • PSPad. Freeware. Bạn có thể chuyển sang chế độ xem Hex bằng cách chọn menu "View" và chọn "Hex Edit Mode"
  • TextPad. Shareware without expiration period. To view the Hex value, you need to "open" the file by choosing the file format of "binary" [??]
  • UltraEdit. Shareware, not free, 30-day trial only

Let me know if you have a better choice, which is fast to launch, easy to use, can toggle between Hex and normal view, free,

The following Java program can be used to display hex code for Java Primitives [integer, character and floating-point]

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
3

In Eclipse, you can view the hex code for integer primitive Java variables in debug mode as follows. Trong phối cảnh gỡ lỗi, bảng "Biến" ⇒ Chọn "menu" [tam giác ngược] ⇒ Java ⇒ Tùy chọn Java. ⇒ Primitive Display Options ⇒ Check "Display hexadecimal values [byte, short, char, int, long]"

Summary - Why Bother about Data Representation?

Integer number

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, floating-point number
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
25 character symbol
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
63, and string
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
95 are totally different inside the computer memory. Bạn cần biết sự khác biệt để viết chương trình tốt và hiệu suất cao

  • Trong số nguyên có dấu 8 bit, số nguyên
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    6 được biểu diễn dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    29
  • In 8-bit unsigned integer, integer number
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    6 is represented as
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    29
  • Trong số nguyên có dấu 16 bit, số nguyên
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    6 được biểu diễn dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    33
  • In 32-bit signed integer, integer number
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    6 is represented as
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    35
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    35
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    33
  • In 32-bit floating-point representation, number
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    25 is represented as
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    39, i. e. ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    41,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08
  • Trong biểu diễn dấu phẩy động 64-bit, số
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    25 được biểu diễn dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    44, i. e. ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    46,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08
  • Trong 8-bit Latin-1, ký hiệu ký tự
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    63 được thể hiện dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    49 [hoặc
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    50]
  • Trong UCS-2 16-bit, ký hiệu ký tự
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    63 được biểu diễn dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    52
  • Trong UTF-8, ký hiệu ký tự
    1001001010B = 0010 0100 1010B = 24AH
    10001011001011B = 0010 0010 1100 1011B = 22CBH
    63 được biểu diễn dưới dạng
    dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
    49

Nếu bạn "thêm" một số nguyên có dấu 16 bit

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 và ký tự Latin-1
1001001010B = 0010 0100 1010B = 24AH
10001011001011B = 0010 0010 1100 1011B = 22CBH
63 hoặc một chuỗi
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
57, bạn có thể nhận được một bất ngờ

Bài tập [Biểu diễn dữ liệu]

Đối với các mã 16 bit sau

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
4

Give their values, if they are representing

  1. a 16-bit unsigned integer;
  2. một số nguyên có dấu 16 bit;
  3. hai số nguyên không dấu 8 bit;
  4. hai số nguyên có dấu 8 bit;
  5. ký tự Unicode 16 bit;
  6. hai ký tự ISO-8859-1 8 bit

trả lời. [1]

dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
59; [2]
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
61; [3]
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58;
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
64,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58; [4]
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58;
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
00,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
58; [5]
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
70;
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
71; [6]
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
72,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
70;
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
74,
dn-1×rn-1 + dn-2×rn-2 + .. + d1×r1 + d0×r0
70

Does Python use twos complement?

This works since integers in Python are treated as arbitrary precision two's complement values. You can then combine this with the int function to convert a string of binary digits into the unsigned integer form, then interpret it as a 12-bit signed value

Làm cách nào để chuyển đổi chuỗi thành hex Python?

The hex[] function converts a specified integer number into a hexadecimal string representation . Use int[x, base] with 16 as base to convert the string x to an integer. Gọi hex[số] với số nguyên là số để chuyển đổi nó thành thập lục phân.

What is the 2's complement representation of in 32 bits?

Understanding Representation By default, integers int are signed 32 bits long, represented in two's complement, which means that it has the following limits. 0000 0000 0000 0000 0000 0000 0000 0000 đại diện cho 0 ; 0111 1111 1111 1111 1111 1111 1111 1111 đại diện cho 2.147.483.647 [2ˆ31−1];

What is the 2's complement of in 8 bits?

For example, an 8-bit unsigned number can represent the values 0 to 255 [11111111]. However a two's complement 8-bit number can only represent positive integers from 0 to 127 [01111111] , because the rest of the bit combinations with the most significant bit as '1' represent the negative integers −1 to −128.

Chủ Đề