Z 437 mẫu số 3 trong python

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 tôi cũng sử dụng hệ thống số thập lục phân [cơ số 16] hoặc 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] có thứ tự là
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 có thứ tự là
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
6 [chục], chữ số ngoài cùng thứ ba bên phải là của . Ví dụ,

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

Chúng tôi sẽ biểu thị một số thập phân với hậu tố tùy chọn ________ 59 của sự mơ hồ phát sinh

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ụ,

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

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
92. Một số ngôn ngữ lập trình biểu thị số nhị phân với tiền tố
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
93 hoặc
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
94 [e. g. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
95], hoặc tiền tố
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
96 với các bit được trích dẫn [e. g. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
97]

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ì

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

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,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
69,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
92,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
81,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
9,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83, and
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
84, đượ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] với hậu tố

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
85. Một số ngôn ngữ lập trình biểu thị số hex bằng tiền tố
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
86 hoặc
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
87 [e. g. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
88] hoặc tiền tố
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
89 với các chữ số hex được trích dẫn [e. g. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
80]

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 chấp nhận chữ thường _______ 481 đến ________ 482 cũng như chữ hoa ________ 483 đến ________ 484

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.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
85, giống như hệ thập lục phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
86]. Hệ thập lục phân được sử dụng dưới dạng rút gọn hoặc tốc ký 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

Thập lục phân Nhị phân Thập phân000000100011200102300113401004501015601106701117810008910019A101010B101111C110012D110113E111014F111115

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ụ:

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

Đ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ố
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
87 sang Số thập phân [Cơ số 10]

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
88 [cơ số r], số thập phân tương đương được cho bởi

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

Ví dụ như,

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

Chuyển đổi từ Số thập phân [Cơ số 10] sang Cơ số
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
87

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

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

Quy trình trên thực tế có thể áp dụng để chuyển đổi giữa 2 hệ thống cơ sở bất kỳ. Ví dụ,

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

Chuyển đổi giữa hai hệ thống số với phần phân số

  1. Tách phần tích phân và phần phân số
  2. Đối với phần tích phân, chia nhiều lần cho cơ số mục tiêu và thu thập phần còn lại theo thứ tự ngược lại
  3. Đối với phần phân số, lặp lại nhân phần phân số với cơ số đích và lấy phần nguyên theo cùng một thứ tự

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

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

ví dụ 2. thập phân sang thập lục phân

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

Bài tập [Chuyển đổi hệ thống số]

  1. Chuyển đổi các số thập phân sau thành số nhị phân và số thập lục phân
  2. Chuyển đổi các số nhị phân sau thành số thập lục phân và số thập phân
    1. A3C5H = 1010 0011 1100 0101B
      102AH = 0001 0000 0010 1010B
      30
    2. A3C5H = 1010 0011 1100 0101B
      102AH = 0001 0000 0010 1010B
      31
    3. A3C5H = 1010 0011 1100 0101B
      102AH = 0001 0000 0010 1010B
      32
  3. Chuyển đổi các số thập lục phân sau thành số nhị phân và số thập phân
  4. Chuyển đổi các số thập phân sau thành số nhị phân tương đương

câu trả lời. Bạn có thể sử dụng Máy tính của Windows [

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
33] để thực hiện chuyển đổi hệ thống số, bằng cách đặt nó ở chế độ Lập trình viên hoặc chế độ khoa học. [Chạy "calc" ⇒ Chọn menu "Cài đặt" ⇒ Chọn chế độ "Lập trình viên" hoặc "Khoa học". ]

  1. A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    34,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    35, ________ 636, ________ 637, ________ 638, ________ 639
  2. ________ 640, ________ 641, ________ 642, ________ 643,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    44,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    45
  3. A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    46,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    47,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    48,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    49,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    800,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    801
  4. ?? . ]

Bộ nhớ máy tính & Biểu diễn dữ liệu

Máy tính sử dụng một số bit cố định để biểu diễn một phần dữ liệu, dữ liệu này có thể là một số, một ký tự hoặc các dữ liệu khác. Vị trí lưu trữ n-bit có thể đại diện cho tối đa 1802 thực thể riêng biệt. Ví dụ: vị trí bộ nhớ 3 bit có thể chứa một trong tám mẫu nhị phân này.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
803,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
804,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
805,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
806,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
807,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
808,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
809 hoặc
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
810. Do đó, nó có thể đại diện cho tối đa 8 thực thể riêng biệt. Bạn có thể sử dụng chúng để biểu thị các số từ 0 đến 7, số 8881 đến 8888, ký tự 'A' đến 'H' hoặc tối đa 8 loại trái cây như táo, cam, chuối;

Ví dụ, số nguyên có thể được biểu diễn bằng 8-bit, 16-bit, 32-bit hoặc 64-bit. Bạn, với tư cách là người lập trình, hãy chọn độ dài bit thích hợp cho các số nguyên của mình. Lựa chọn của bạn sẽ áp đặt ràng buộc về phạm vi số nguyên có thể được biểu diễn. Bên cạnh độ dài bit, một số nguyên có thể được biểu diễn trong các lược đồ biểu diễn khác nhau, chẳng hạn như. g. , không dấu so với. số nguyên có dấu. Số nguyên không dấu 8 bit có phạm vi từ 0 đến 255, trong khi số nguyên có dấu 8 bit có phạm vi từ -128 đến 127 - cả hai đều đại diện cho 256 số riêng biệt

Điều quan trọng cần lưu ý là một vị trí bộ nhớ máy tính chỉ lưu trữ một mẫu nhị phân. Lập trình viên hoàn toàn tùy thuộc vào bạn để quyết định cách diễn giải các mẫu này. Ví dụ: mẫu nhị phân 8 bit

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
811 có thể được hiểu là số nguyên không dấu
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
812 hoặc ký tự ASCII
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83 hoặc một số thông tin bí mật chỉ bạn biết. Nói cách khác, trước tiên bạn phải quyết định cách biểu diễn một phần dữ liệu theo mẫu nhị phân trước khi mẫu nhị phân có ý nghĩa. Việc giải thích mẫu nhị phân được gọi là biểu diễn hoặc mã hóa dữ liệu. Hơn nữa, điều quan trọng là các sơ đồ biểu diễn dữ liệu phải được tất cả các bên đồng ý. e. , các tiêu chuẩn công nghiệp cần được xây dựng và tuân thủ ngay

Sau khi bạn quyết định sơ đồ biểu diễn dữ liệu, một số ràng buộc nhất định, cụ thể là độ chính xác và phạm vi sẽ được áp dụng. Do đó, điều quan trọng là phải hiểu biểu diễn dữ liệu để viết các chương trình hiệu suất cao và chính xác.

Rosette Stone và giải mã chữ tượng hình Ai Cập

Chữ tượng hình Ai Cập [kế bên trái] được người Ai Cập cổ đại sử dụng từ năm 4000 trước Công nguyên. Thật không may, kể từ năm 500 sau Công nguyên, không ai có thể đọc được chữ tượng hình Ai Cập cổ đại nữa, cho đến khi quân đội của Napoléon [trong cuộc xâm lược Ai Cập của Napoléon] tái phát hiện ra Phiến đá Rosette vào năm 1799 gần thị trấn Rashid [Rosetta] ở đồng bằng sông Nile.

Phiến đá Rosetta [trái] được khắc một sắc lệnh vào năm 196 trước Công nguyên thay mặt cho Vua Ptolemy V. Nghị định xuất hiện trong ba kịch bản. văn bản phía trên là chữ tượng hình Ai Cập cổ đại, phần giữa là chữ Demotic và chữ Hy Lạp cổ đại thấp nhất. Bởi vì về cơ bản nó trình bày cùng một văn bản trong cả ba chữ viết và tiếng Hy Lạp cổ đại vẫn có thể được hiểu, nó cung cấp chìa khóa để giải mã chữ tượng hình Ai Cập

Đạo đức của câu chuyện là trừ khi bạn biết sơ đồ mã hóa, không có cách nào bạn có thể giải mã dữ liệu

Tài liệu tham khảo và hình ảnh. Wikipedia

Biểu diễn số nguyên

Số nguyên là số nguyên hoặc số có điểm cố định với điểm cơ số cố định sau bit có nghĩa nhỏ nhất. Chúng tương phản với số thực hoặc số dấu phẩy động, trong đó vị trí của dấu cơ số thay đổi. Điều quan trọng cần lưu ý là số nguyên và số dấu phẩy động được xử lý khác nhau trong máy tính. Chúng có biểu diễn khác nhau và được xử lý khác nhau [e. g. , các số dấu phẩy động được xử lý trong cái gọi là bộ xử lý dấu phẩy động]. Số dấu phẩy động sẽ được thảo luận sau

Máy tính sử dụng một số bit cố định để biểu diễn một số nguyên. Độ dài bit thường được sử dụng cho số nguyên là 8 bit, 16 bit, 32 bit hoặc 64 bit. Bên cạnh độ dài bit, có hai sơ đồ biểu diễn cho số nguyên

  1. Số nguyên không dấu. có thể đại diện cho số không và số nguyên dương
  2. Số nguyên có dấu. có thể đại diện cho số không, số nguyên dương và âm. Ba lược đồ biểu diễn đã được đề xuất cho các số nguyên có dấu
    1. Đại diện Sign-Cường độ
    2. Biểu diễn bổ sung của 1
    3. Biểu diễn bổ sung của 2

Bạn, với tư cách là người lập trình, cần quyết định độ dài bit và sơ đồ biểu diễn cho các số nguyên của mình, tùy thuộc vào yêu cầu của ứng dụng của bạn. Giả sử rằng bạn cần một bộ đếm để đếm một số lượng nhỏ từ 0 đến 200, bạn có thể chọn sơ đồ số nguyên không dấu 8 bit vì không có số âm nào liên quan

Số nguyên không dấu n-bit

Số nguyên không dấu có thể đại diện cho số không và số nguyên dương, nhưng không phải số nguyên âm. Giá trị của một số nguyên không dấu được hiểu là "độ lớn của mẫu nhị phân cơ bản của nó"

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và mẫu nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
815, giá trị của số nguyên không dấu này là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
816

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
817 và mẫu nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
818, giá trị của số nguyên không dấu này là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
819

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
817 và mẫu nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
821, giá trị của số nguyên không dấu này là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5

Một mẫu n-bit có thể đại diện cho

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
802 số nguyên riêng biệt. Một số nguyên không dấu n-bit có thể đại diện cho các số nguyên từ
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
5 đến
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
825, như bảng dưới đây

nTối thiểuTối đa80[2^8]-1  [=255]160[2^16]-1 [=65.535]320[2^32]-1 [=4.294.967.295] [9+ chữ số]640[2^64]-1 [

Số nguyên có dấu

Số nguyên đã ký có thể đại diện cho số không, số nguyên dương cũng như số nguyên âm. Ba sơ đồ biểu diễn có sẵn cho các số nguyên đã ký

  1. Đại diện Sign-Cường độ
  2. Biểu diễn bổ sung của 1
  3. Biểu diễn bổ sung của 2

Trong cả ba sơ đồ trên, bit quan trọng nhất [msb] được gọi là bit dấu. 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 diễn giải 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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
827.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
829
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
830

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
832.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
834
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
835

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
837.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
839
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
840

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
842.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
839
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
845

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 [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    846 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    847] cho số 0, điều này có thể dẫn đến sự kém 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"
    • đố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ù [nghịch đảo] của mẫu nhị phân [n-1]-bit" [do đó được gọi là phần bù 1]

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
827.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
829
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
830

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
832.
   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
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
856, i. e. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
857
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
858

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
837.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
839
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
840

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
865.
   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
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
867, i. e. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
839
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
845

Một lần nữa, nhược điểm là

  1. Có hai cách biểu diễn [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    846 và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    871] cho số không
  2. Các số nguyên dương và số nguyên âm cần được xử lý riêng

Các số nguyên có dấu n-bit trong biểu diễn phần bù của 2

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

  • 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ù của 2]

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
827.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
829
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
830

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
832.
   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
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
856 cộng với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, i. e. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
882
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
883

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
837.
   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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
839
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
840

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814 và biểu diễn nhị phân
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
865.
   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
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
867 cộng với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, i. e. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
894
   Do đó, số nguyên là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
835

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 ______1896

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

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 ______1897

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

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

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

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
814, phạm vi của các số nguyên có dấu của phần bù 2 là
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. Giả sử rằng

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
02 [tràn - ngoài phạm vi]

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

Ví dụ 5. dòng chảy ngầm. Giả sử rằng

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
03 [tràn - dưới phạm vi]

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

Sơ đồ sau đây giải thích cách hoạt động của phần bù 2. Bằng cách sắp xếp lại dãy số, các giá trị 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 được biểu diễn liên tục bằng cách bỏ qua bit mang

Phạm vi của các số nguyên có dấu bổ sung của n-bit 2

Số nguyên có dấu bổ sung của n-bit 2 có thể biểu diễn các số nguyên từ

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
06 đến
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
07, như được lập bảng. Hãy lưu ý rằng lược đồ có thể đại diện cho tất cả các số nguyên trong phạm vi mà không có bất kỳ khoảng cách nào. Nói cách khác, không có số nguyên nào bị thiếu trong phạm vi được hỗ trợ

nminimummaximum8-[2^7]  [=-128]+[2^7]-1  [=+127]16-[2^15] [=-32,768]+[2^15]-1 [=+32,767]

Giải mã các số bù của 2

  1. Kiểm tra bit dấu [ký hiệu là
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08]
  2. Nếu
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09, số dương và giá trị tuyệt đối của nó là giá trị nhị phân của n-1 bit còn lại
  3. Nếu
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    10, số đó là số âm. bạn có thể "đảo ngược n-1 bit và cộng 1" để lấy giá trị tuyệt đối của số âm.
    Hoặc, bạn có thể quét n-1 bit còn lại từ bên phải [bit ít quan trọng nhất]. Hãy tìm lần xuất hiện đầu tiên của 1. Lật tất cả các bit sang bên trái của lần xuất hiện đầu tiên của 1. Mẫu lật cho giá trị tuyệt đối. Ví dụ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    86

Big Endian vs. Little Endian

Các máy tính hiện đại lưu trữ một byte dữ liệu trong mỗi địa chỉ hoặc vị trí bộ nhớ, tôi. e. , bộ nhớ địa chỉ byte. Do đó, một số nguyên 32 bit được lưu trữ trong 4 địa chỉ bộ nhớ

Thuật ngữ "Endian" dùng để chỉ thứ tự lưu trữ byte trong bộ nhớ máy tính. 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 trong biểu diễn không dấu 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ù 2 8 bit
  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 ký hiệ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 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. ________ 044, ________ 045, ________ 046, ________ 040,
    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. ________ 044, ________ 052, ________ 053, _______ 054,
    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 [_______ 067] và số âm rất nhỏ [_______ 067], cũng như số 0, như minh họa

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
84] và một số mũ [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83] của một cơ số nhất định [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
87], ở dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
72. Số thập phân dùng cơ số là 10 [______073];

Biểu diễn số dấu phẩy động không phải là duy nhất. 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. Ở dạng chuẩn hóa, chỉ có một chữ số khác 0 trước điểm cơ số. 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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
802 phân 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, 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ố [

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
84] và số mũ [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83] với cơ số là 2, ở dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
74. Cả
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83 và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
84 đều có thể tích cực cũng như tiêu cực. Các máy tính hiện đại áp dụng tiêu chuẩn IEEE 754 để biểu diễn các số dấu phẩy động. Có hai lược đồ biểu diễn. Độ chính xác đơn 32 bit và độ chính xác kép 64 bit

Số dấu phẩy động độ chính xác đơn 32 bit IEEE-754

Trong biểu diễn dấu phẩy động độ chính xác đơn 32 bit

  • Bit quan trọng nhất là bit dấu [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08], với 0 cho số dương và 1 cho số âm
  • 8 bit sau đại diện cho số mũ [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    83]
  • 23 bit còn lại đại diện cho phân số [______384]
Mẫu chuẩn hóa

Hãy minh họa bằng một ví dụ, giả sử rằng mẫu 32 bit là

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

  • 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

Ở dạng chuẩn hóa, phân số thực tế được chuẩn hóa với số 1 đứng đầu ẩn ở dạng

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
96. Trong ví dụ này, phân số thực tế là
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
97

Bit dấu đại diện cho dấu của số, với

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
09 cho số dương và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10 cho số âm. Trong ví dụ này với
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10, đây là số âm, i. e. ,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
01

Ở dạng chuẩn hóa, số mũ thực tế là

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
02 [cái gọi là thặng dư-127 hoặc sai lệch-127]. Điều này là do chúng ta cần đại diện cho cả số mũ dương và âm. Với E 8 bit, nằm trong khoảng từ 0 đến 255, lược đồ vượt quá 127 có thể cung cấp số mũ thực tế từ -127 đến 128. Trong ví dụ này,
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
03

Do đó, số đại diện là

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

Hình thức khử chuẩn hóa

Dạng chuẩn hóa có một vấn đề nghiêm trọng, với số 1 đứng đầu ngầm định cho phân số, nó không thể biểu thị số 0. Thuyết phục bản thân về điều này

Dạng không chuẩn hóa được tạo ra để biểu diễn số 0 và các số khác

Đối với

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05, các số ở dạng không chuẩn hóa. Một số 0 đứng đầu ẩn [thay vì 1] được sử dụng cho phân số; . Do đó, số 0 có thể được biểu diễn bằng
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05 và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
08 [vì
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
09]

Chúng ta cũng có thể biểu diễn các số dương và số âm rất nhỏ ở dạng không chuẩn hóa với

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05. Ví dụ: nếu
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 và
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
13. Phân số thực tế là
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
14. Kể từ
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
10, nó là một số âm. Với
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
05, số mũ thực tế là
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
06. Do đó, số này là
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
18, là một số âm cực nhỏ [gần bằng 0]

Tóm lược

Tóm lại, giá trị [

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

  • Cho
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    20. Những con số này ở dạng được gọi là chuẩn hóa. Dấu bit đại diện cho dấu của số. Phần phân số [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    96] được chuẩn hóa với phần đầu ẩn 1. Số mũ là thiên vị [hoặc vượt quá] của
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    14, để đại diện cho cả số mũ dương và âm. Phạm vi của số mũ là
    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
  • Cho
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    25. Những con số này ở dạng được gọi là không chuẩn hóa. Số mũ của
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    26 ước tính thành một số rất nhỏ. Dạng không chuẩn hóa là cần thiết để đại diện cho số không [với
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08 và
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    05]. Nó cũng có thể đại diện cho số dương và số âm rất nhỏ gần bằng không
  • Đối với
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    29, nó đạ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 [dương và âm vô cùng] và
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    31 [không phải là số]. Điều này nằm ngoài phạm vi của bài viết này

ví dụ 1. 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
32

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

ví dụ 2. 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
33

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

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

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

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
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
52 32-bit 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

  • Bit quan trọng nhất là bit dấu [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08], với 0 cho số dương và 1 cho số âm
  • 11 bit sau đại diện cho số mũ [______383]
  • 52 bit còn lại đại diện cho phân số [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    84]

Giá trị [

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

  • dạng chuẩn hóa. 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 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 [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    08] là dễ hiểu [0 cho số dương và 1 cho số âm]
  • Đối với số mũ [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    83], cái gọi là sai lệch [hoặc dư 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ố [
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    84] [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

Hãy lưu ý rằng mẫu n-bit có số lượng kết hợp hữu hạn [

A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
77], có thể đại diện cho 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]Chuẩn hóa N[tối đa]Đơn0080 0000H
0 00000001 00000000000000000000000B
E = 1, F = 0
N[min] = 1.0B × 2^-126
[≈1. 17549435 × 10^-38]7F7F FFFFH
0 11111110 00000000000000000000000B
E = 254, F = 0
N[tối đa] . 1. 1B × 2^127 = [2 - 2^-23] × 2^127
[≈3. 4028235 × 10^38]Double0010 0000 0000 0000H
N[phút] = 1. 0B × 2^-1022
[≈2. 2250738585072014 × 10^-308]7FEF FFFF FFFF FFFFH
N[max] = 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 0 ở đầu được giả định, như sau

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

Dạng không chuẩn hóa có thể biểu thị các số rất nhỏ đóng bằng 0 và 0, không thể biểu diễn ở dạng chuẩn hóa, như thể hiện trong hình trên

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[min]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[tối đa] . 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]Giá trị đặc biệt

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 [
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
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 [
A3C5H = 1010 0011 1100 0101B
102AH = 0001 0000 0010 1010B
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ố khác 0 nào

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ố
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    903 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    904 lần lượt đại diện cho
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    83 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    906
  • mã số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    907 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    908 lần lượt đại diện cho
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    81 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    910
  • mã số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    911 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    912 lần lượt đại diện cho
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    913 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    914

Đ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. , mẫu 8 bit "______1915" có thể đại diện cho bất kỳ thứ gì dưới ánh mặt trời mà chỉ người đã mã hóa nó mới biết

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. ]
  • Mã số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    916 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    917 là các ký tự in được [hiển thị được] như được lập bảng [sắp xếp theo hệ thập lục phân và thập phân] như sau. Hex 0123456789ABCDEF 2SP. "#$%&'[]*+,-. /30123456789. ;
    Dec01234567893SP. "#$%&'4[]*+,-. /01523456789. ;6
    • Mã số
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      916 là ký tự trống hoặc khoảng trắng
    • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      913 đến
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      914.
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      921 hoặc
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      922 trong đó
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      923 là giá trị số nguyên tương đương
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      924
    • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      83 đến
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      906.
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      927 hoặc
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      928.
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      83 đến
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      906 liên tục không có khoảng cách
    • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      81 đến
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      910.
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      933 hoặc
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      934.
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      83 đến
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      906 cũng liên tục không có khoảng cách. Tuy nhiên, có một khoảng cách giữa chữ hoa và chữ thường. Để chuyển đổi giữa chữ hoa và chữ thường, lật giá trị của bit-5
  • Mã số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    937 đến
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    938, và
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    939 là các ký tự điều khiển đặc biệt, không in được [không hiển thị được], như bảng dưới đây. Nhiều ký tự trong số này đã được sử dụng trong những ngày đầu để điều khiển truyền dẫn [e. g. , STX, ETX] và điều khiển máy in [e. g. , Form-Feed], hiện đã lỗi thời. Các mã có ý nghĩa còn lại ngày hôm nay là
    • ________ 1940 cho Tab [______ 1941]
    • A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      942 cho Line-Feed hoặc newline [LF hoặc
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      943] và
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      944 cho Carriage-Return [CR hoặc
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      945], được sử dụng làm dấu phân cách dòng [còn gọi là dấu phân cách dòng, cuối dòng] cho các tệp văn bản. Rất tiếc, không có tiêu chuẩn cho dấu phân cách dòng. Unix và Mac sử dụng
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      942 [LF hoặc "________ 1947"], Windows sử dụng ________ 1948 [CRLF hoặc "________ 1949"]. Các ngôn ngữ lập trình như C/C++/Java [được tạo trên Unix] sử dụng
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      942 [LF hoặc "______1947"]
    • Trong các ngôn ngữ lập trình như C/C++/Java, line-feed [
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      942] được ký hiệu là _______ 1943, xuống dòng [________ 1944] là ________ 1955, tab [
      A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
      940] là ________ 1941
DECHEXÝ nghĩaDECHEXÝ nghĩa000NULNull1711DC1Điều khiển thiết bị 1101SOHBắt đầu tiêu đề1812DC2Điều khiển thiết bị 2202STXBắt đầu văn bản1913DC3Điều khiển thiết bị 3303ETXKết thúc văn bản2014DC4Điều khiển thiết bị 4404EOTKết thúc truyền2115NAK Xác nhận âm. 505ENQEnquiry2216SYNSync. Idle606ACKAcknowledgment2317ETBEnd of Transmission707BELBell2418CANCancel808BSBack Space
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
9582519EMEnd of Medium909HTHorizontal Tab
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
941261ASUBSubstitute100ALFLine Feed
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
943271BESCEscape110BVTVertical Feed281CIS4File Separator120CFFForm Feed
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
82291DIS3Group Separator130DCRCarriage Return
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
955301EIS2Record Separator140ESOShift Out311FIS1Unit Separator150FSIShift In1610DLEDatalink Escape1277FDELDelete

8-bit Latin-1 [hay còn gọi là ISO/IEC 8859-1]

ISO/IEC-8859 là tập hợp các tiêu chuẩn mã hóa ký tự 8 bit cho các ngôn ngữ phương Tây

ISO/IEC 8859-1, còn gọi là bảng chữ cái Latinh Không. 1, hay viết tắt là Latin-1, là sơ đồ mã hóa được sử dụng phổ biến nhất cho các ngôn ngữ Tây Âu. Nó có 191 ký tự có thể in được từ hệ chữ Latinh, bao gồm các ngôn ngữ như tiếng Anh, tiếng Đức, tiếng Ý, tiếng Bồ Đào Nha và tiếng Tây Ban Nha. Latin-1 tương thích ngược với mã US-ASCII 7-bit. Nghĩa là, 128 ký tự đầu tiên trong Latin-1 [mã số từ 0 đến 127 [7FH]], giống như US-ASCII. Mã số 128 [80H] đến 159 [9FH] không được chỉ định. Mã số 160 [A0H] đến 255 [FFH] được đưa ra như sau

Hex0123456789abcdefanbsp¡ £ ¥ §¨ ©

ISO/IEC-8859 có 16 phần. Bên cạnh Phần 1 được sử dụng phổ biến nhất, Phần 2 dành cho Trung Âu [Ba Lan, Séc, Hungary, v.v.], Phần 3 dành cho Nam Âu [tiếng Thổ Nhĩ Kỳ, v.v.], Phần 4 dành cho Bắc Âu [tiếng Estonia, Latvia, v.v.], . Phần 16 cho Đông Nam Âu

Phần mở rộng 8-bit khác của US-ASCII [ASCII Extensions]

Bên cạnh ISO-8859-x đã được tiêu chuẩn hóa, còn có nhiều phần mở rộng ASCII 8 bit không tương thích với nhau

ANSI [Viện Tiêu chuẩn Quốc gia Hoa Kỳ] [còn gọi là Windows-1252 hoặc Windows Codepage 1252]. cho các bảng chữ cái Latinh được sử dụng trong các hệ thống DOS/Windows kế thừa. Nó là một siêu bộ của ISO-8859-1 với các số mã từ 128 [80H] đến 159 [9FH] được gán cho các ký tự có thể hiển thị, chẳng hạn như dấu ngoặc đơn và dấu ngoặc kép "thông minh". Một vấn đề phổ biến trong trình duyệt web là tất cả các dấu ngoặc kép và dấu nháy đơn [được tạo bởi "dấu ngoặc kép thông minh" trong một số phần mềm của Microsoft] đã được thay thế bằng dấu chấm hỏi hoặc một số ký hiệu lạ. Đó 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

Hex 0123456789ABCDEF 8€‚ƒ„…†‡ˆ‰Š‹ŒŽ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]. Đó 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ó bit
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    963 ở đầu. Nói cách khác, các byte ASCII, với bit
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    913 đứng đầu, có thể được xác định và giải mã dễ dàng

Ví dụ. 您好

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

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

Mã UnicodeUTF-16Bytesxxxxxxxx xxxxxxxxGiống như UCS-2 - không mã hóa2000uuuuu zzzzyyyy yyxxxxxx
[uuuuu≠0]110110ww wwzzzzyy 110111yy yyxxxxxx
[wwww = uuuuu

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 thay thế cao, [

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
966], giá trị thứ hai từ phạm vi thay thế thấp [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
967]

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 endian nhỏ, 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à

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
968] được lưu dưới dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
969 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à

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
971, 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
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
972 trong kho lưu trữ. Đối với little-endian, BOM xuất hiện dưới dạng
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
973. 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 độ bền. Đối với big-endian, BOM xuất hiện dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    972 trong kho lưu trữ. Đối với little-endian, BOM xuất hiện dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    973

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 [

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
971] được mã hóa bằng UTF-8 thành
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
977. 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.

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
942 [Line-Feed hoặc LF] và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
944 [Vận chuyển-Trả về hoặc CR]

  • Windows/DOS sử dụng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    980 [CR+LF hoặc "
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    949"] làm EOL
  • Unix và Mac chỉ sử dụng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    942 [LF hoặc "
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    947"]

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
984 để hiển thị bảng mã hiện tại hoặc
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
985 để 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. , cùng một mã số được gán cho các ký tự khác nhau

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 "

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
986" để hiển thị trang mã hiện tại và lệnh "
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
987" để 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. ,

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
988,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
989,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
990. 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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
989,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
988,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
990 vì chữ hoa có số mã nhỏ hơn chữ 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à
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
994 [mười] lần được sắp xếp trước
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
995 đến
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
996

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, xác đị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. , ________ 483, ________ 481 ⇒ ________ 1999, ________ 3600 ⇒. ⇒

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
906,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
910. 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. ,
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
83 ⇒______1999 ⇒
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
605. ⇒
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
81 ⇒______3607. Thông thường, khoảng trắng được xếp trước các chữ số
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
913 đến
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
914, 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 -
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
610

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

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
611 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

Ví 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 -
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
612 và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
613

Kiểu dữ liệu

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
612 dựa trên tiêu chuẩn Unicode 16-bit ban đầu được gọi là UCS-2. Kể từ đó, Unicode đã phát triển thành 21 bit, với dải mã từ U+0000 đến U+10FFFF. Tập hợp các ký tự từ U+0000 đến U+FFFF được gọi là Mặt phẳng đa ngôn ngữ cơ bản [BMP]. Các ký tự trên U+FFFF được gọi là ký tự phụ. Java 16-bit
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
612 không thể chứa một ký tự bổ sung

Nhớ lại rằng trong lược đồ mã hóa UTF-16, một ký tự BMP sử dụng 2 byte. Nó giống như UCS-2. Một ký tự bổ sung sử dụng 4 byte. và yêu cầu một cặp giá trị 16 bit, giá trị đầu tiên từ phạm vi thay thế cao, [

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
966], giá trị thứ hai từ phạm vi thay thế thấp [
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
967]

Trong Java, một

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
613 là một chuỗi các ký tự Unicode. Trên thực tế, Java sử dụng UTF-16 cho
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
613 và
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
620. Đối với các ký tự BMP, chúng 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ị
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
612

Các phương thức Java chấp nhận giá trị 16-bit

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
612 không hỗ trợ các ký tự bổ sung. Các phương thức chấp nhận giá trị 32 bit
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
623 hỗ trợ tất cả các ký tự Unicode [ở 21 bit thấp hơn], bao gồm các ký tự bổ sung

Đây có nghĩa là một cuộc thảo luận học thuật. Tôi chưa gặp phải việc sử dụng các ký tự phụ

Hiển thị giá trị Hex & Trình chỉnh sửa Hex

Đôi khi, bạn có thể cần hiển thị các giá trị hex của tệp, đặc biệt là khi xử lý các ký tự Unicode. Hex Editor là một công cụ hữu ích mà một lập trình viên giỏi nên có trong hộp công cụ của mình. Có rất nhiều phần mềm miễn phí/phần mềm chia sẻ Hex Editor có sẵn. Hãy thử google "Trình chỉnh sửa Hex"

Tôi đã sử dụng những điều sau đây

  • NotePad ++ với Trình cắm Hex Editor. Mã nguồn mở và miễn phí. Bạn có thể chuyển đổi giữa chế độ xem Hex và chế độ xem Bình thường bằng cách nhấn nút "H"
  • PSPad. phần mềm miễn phí. Bạn có thể chuyển sang chế độ xem Hex bằng cách chọn menu "View" và chọn "Hex Edit Mode"
  • Văn bản. Phần mềm chia sẻ không có thời gian hết hạn. Để xem giá trị Hex, bạn cần "mở" tệp bằng cách chọn định dạng tệp là "nhị phân" [??]
  • UltraSửa đổi. Phần mềm chia sẻ, không miễn phí, chỉ dùng thử 30 ngày

Hãy cho tôi biết nếu bạn có lựa chọn nào tốt hơn, khởi chạy nhanh, dễ sử dụng, có thể chuyển đổi giữa chế độ xem Hex và bình thường, miễn phí,

Chương trình Java sau đây có thể được sử dụng để hiển thị mã hex cho Nguyên thủy Java [số nguyên, ký tự và dấu phẩy động]

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

Trong Eclipse, bạn có thể xem mã hex cho các biến Java nguyên thủy số nguyên trong chế độ gỡ lỗi như sau. Ở góc độ gỡ lỗi, bảng "Biến" ⇒ Chọn "menu" [tam giác ngược] ⇒ Java ⇒ Tùy chọn Java. ⇒ Tùy chọn hiển thị nguyên thủy ⇒ Chọn "Hiển thị giá trị thập lục phân [byte, short, char, int, long]"

Tóm tắt - Tại sao phải bận tâm về biểu diễn dữ liệu?

Số nguyên

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6, số dấu phẩy động
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
625 ký tự ký hiệu
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
963 và chuỗi
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
995 hoàn toàn khác nhau trong bộ nhớ máy tính. Bạn cần biết sự khác biệt để viết chương trình tốt và hiệu năng 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
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    629
  • Trong số nguyên không 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
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    629
  • 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
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    633
  • Trong số nguyên có dấu 32 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
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    635
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    635
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    633
  • Trong biểu diễn dấu phẩy động 32-bit, số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    625 được biểu diễn dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    639, i. e. ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    641,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08
  • Trong biểu diễn dấu phẩy động 64-bit, số
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    625 được biểu diễn dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    644, i. e. ,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    09,
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    646,
    A3C5H = 1010 0011 1100 0101B
    102AH = 0001 0000 0010 1010B
    08
  • Trong 8-bit Latin-1, ký hiệu ký tự
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    963 được biểu diễn dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    649 [hoặc
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    650]
  • Trong UCS-2 16-bit, ký hiệu ký tự
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    963 được biểu diễn dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    652
  • Trong UTF-8, ký hiệu ký tự
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    963 được biểu diễn dưới dạng
    A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
    649

Nếu bạn "thêm" một số nguyên có chữ ký 16 bit

A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
6 và ký tự Latin-1
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
963 hoặc một chuỗi
A3EH = A00H + 30H + EH = 10×16^2 + 3×16^1 + 14×16^0
657, 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

Đưa ra các giá trị của chúng, nếu chúng đại diện cho

  1. một số nguyên không dấu 16 bit;
  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]

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

Chủ Đề