CÁCH CHUYỂN ĐỔI CÁC HỆ CƠ SỐ

     

Trong bài bác này mình sẽ reviews với chúng ta một số định nghĩa về đẳng cấp số cơ bản thường sử dụng trong lập trình sẵn nhúng

Mục tiêu

Hiểu được số nhị phân (binary), số thập lục phân(hexadecimal), dạng hình số nguyên bao gồm dấu cùng không vệt (signed và unsigned integers)Cách biến hóa giữa các kiểu số

Giới thiệu

Chúng ta đang quá thân quen với hệ thập phân, nghĩa là các số với giá trị là 0,1,2,3,4,5,6,7,8,9, hệ nhị phân tương tự như nhưng chỉ bao gồm 2 quý hiếm là 0,1 với hệ thập lục phân vẫn sử dụng các số có mức giá trị là 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, ở đây mình xin đi qua một số ví dụ để các chúng ta cũng có thể nắm được một trong những cách thay đổi cơ bản.Hệ thập phân:1984 = 1•103 + 9•102 + 8•101 + 4•100

273.15 = 2•102 + 7•101 + 3•100 + 1•10-1 + 5•10-2Hệ nhị phân:

011010102 = 0•27 + 1•26 + 1•25 + 0•24 + 1•23 + 0•22 + 1•21 + 0•20 = 64+32+8+2 = 106Hệ thập lục phân:

0x12AD = 1•163 + 2•162 + 10•161 + 13•160 = 4096+512+160+13 = 4781

Chuyển thay đổi giữa số nhị phân và thập phân

Hầu hết những số nhị phân được giữ trong bộ nhớ lưu trữ của máy vi tính sẽ bao gồm độ dài là 8, 16, 32 bit. 8-bit được gọi là một trong những byte, 16-bit thì được call là halfword với 32-bit được call là word.

Bạn đang xem: Cách chuyển đổi các hệ cơ số

Chuyển trường đoản cú nhị phân quý phái thập phân

Ví dụ: giá trị thập phân của số nhị phân 8 bit 111111112 là từng nào ?

111111112 = 1•27 + 1•26 + 1•25 + 1•24 + 1•23 + 1•22 + 1•21 + 1•20 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

Ví dụ: quý hiếm thập phân của số nhị phân 8 bit 011010102

011010102 = 0•27 + 1•26 + 1•25 + 0•24 + 1•23 + 0•22 + 1•21 + 0•20 = 64+32+8+2 = 106

Chuyển từ bỏ thập phân quý phái nhị phân

Ví dụ: quý giá nhị phân của số thập phân 123123/2 = 61 dư 161/2 = 30 dư 130/2 = 15 dư 015/2 = 7 dư 17/2 = 3 dư 13/2 = 1 dư 11/2 = 0 dư 1Giá trị số nhị phân là 01111011Ví dụ: giá trị nhị phân của số thập phân 254254/2 = 127 dư 0127/2 = 63 dư 163/2 = 31 dư 131/2 = 15 dư 115/2 = 7 dư 17/2 = 3 dư 13/2 = 1 dư 13/2 = 1 dư 1Giá trị số nhị phân là 11111110

Chuyển đổi giữa số nhị phân với thập lục phân

Số nhị phân là ngôn từ mặc định của dòng sản phẩm tính, cơ mà lại khiến quá nhiều bối rối cho bọn chúng ta, bạn thử hình dung xem nếu với một dãy tài liệu toàn 010010101010101010101 vậy nên thì tất cả đáng hại không ? Để đơn giản khi làm việc với những số nhị phân thì fan ta sử dụng những số có tương quan gọi là số thập lục phân (hexadecimal).

Với số thập lục phân sẽ sở hữu giá trị là các số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Vào các laptop thì không minh bạch khi viết hoa hoặc viết thường những chữ cái trong các thập lục phân nên 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F cùng 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f được xem là như nhau.

Chúng ta thường call số thập lục phân là số “hex” và để riêng biệt với những số khác thì thường sẽ có 0x hoặc $ nghỉ ngơi phía trước số thập lục phân, vào C thường dùng là 0x. Các số thập lục phân cơ phiên bản 160, 161, 162, 163,… hoặc 1, 16, 256, 4096,…

Nibble hay được dùng để định nghĩa 4 bit nhị phân hoặc một số thập lục phân (16 = 24), từng 4-bit nibble này vẫn tương ứng với cùng một số hex như hình sau

*

Để đưa từ số nhị phân(Binary) về thập lục phân(Hexadecimal) và ngược lại thì bọn họ sẽ xem hình minh họa sau

*

Chuyển từ thập lục phân thanh lịch nhị phân

Bước 1: gửi từng số trong những hex lịch sự nibble.

Bước 2: phối kết hợp các nibble lại thành số nhị phân.

Ví dụ: chuyển số hex 0x40 về số nhị phân

Đầu tiên phân tách từng số hex ra và gửi về số nhị phân 0x4 = 01002 với 0x0 = 00002 . Sau đó kết vừa lòng 2 số này lại thành 1 là 010000002 . Vậy 0x40 = 010000002

Ví dụ: dịch số hex 0x63F về số nhị phân

Đầu tiên phân tách từng số hex ra và đưa về số nhị phân 0x6 = 01102 cùng 0x3 = 00112 ,0xF = 11112 . Kế tiếp kết thích hợp 3 số này lại thành 1 là 0110001111112 . Vậy 0x63F = 0110001111112

Chuyển từ bỏ nhị phân thanh lịch thập lục phân

Bước 1: Chia những số nhị tạo thành các nibble hòa hợp lý.

Bước 2: Chuyển những nibble này thành số hex tương ứng.

Ví dụ: dịch số nhị phân 010001012 về số hex

Đầu tiên phân tách số nhị phân thành nhóm 4 bit 01002 = 0x4 và 01012 = 0x5. Tiếp tục kết hợp 2 số đó lại thành một là 0x45. Vậy 010001012 = 0x45

Ví dụ: nhảy số nhị phân 1100101010112 về số hex

Đầu tiên phân chia số nhị tạo thành nhóm 4 bit 11002 = 0xC với 10102 = 0xA, 10112 = 0xB. Tiếp tục phối kết hợp 3 số này lại thành 1 là 0xCAB. Vậy 1100101010112= 0xCAB

Vậy cực hiếm thập phân của số thập lục phân 8 bit 0xFF là từng nào ?

0xFF = 15•161 + 15•160 = 255

Precision cùng Byte

Precision có ý nghĩa là số giá trị lẻ tẻ hoặc những giá trị khác biệt, nó được thể hiện dưới dạng alternative(số vắt thế), byte, hoặc binary bit (bit nhị phân).

Ví dụ: Định dạng của một vài 8-bit có thể biểu diễn được 256 số khác nhau. Rõ ràng với 8-bit của DAC(chuyển thay đổi số tương tự) rất có thể tạo ra được 256 quý giá analog output hoặc với 8-bit ADC(chuyển đổi tựa như số) thì hoàn toàn có thể đo được 256 giá bán trị không giống nhau từ analog input.

Ta hoàn toàn có thể xem bảng sau để tìm hiểu được quan hệ giữa precision vào bit nhị phân với trong alternative. Ký kết hiệu <> được định nghĩa là cực hiếm integer béo nhất. Cột byte là số byte mà bộ lưu trữ sử dụng để lưu trữ

Ví dụ:<<2.1>>, <<2.9>> với <<3.0>> sẽ bằng 3.

*

Một byte sẽ bao gồm 8-bit với từng bit tự b7,…,b0 là những số nhị phân có mức giá trị là một hoặc 0. B7 thường được gọi là most significant bit (MSB) hay có cách gọi khác là bit gồm trọng số béo nhất, và b0 là least significant bit (LSB) hay bit gồm trọng số nhỏ dại nhất.

*

Nếu 1 byte được dùng để làm biểu diễn số unsigned thì cực hiếm của số này là

N = 128•b7 + 64•b6 + 32•b5 + 16•b4 + 8•b3 + 4•b2 + 2•b1 + b0

Có một xem xét là trọng số của bit n là 2n và tất cả tới 256 số unsigned 8-bit không giống nhau, số bé dại nhất là 0 và số lớn số 1 là 255.

Ví dụ: 000010102 là 8+2 hoặc 10

Ngoài ra với LSB thì ta hoàn toàn có thể biết được một trong những là số chẵn(even) giỏi lẻ (odd)

Ví dụ:

*

2’s Complement

Trước khi bước đầu thì có một số điểm như sau:

Nếu bit nhị phân trọng số rẻ là 0 thì sẽ là số chẵn.Nếu bit không tính cùng bên bắt buộc của n bit là 0 thì số thì số đó phân chia hết mang đến 2n.Với một số trong những 8-bit unsigned, trường hợp bit 7 là low (0) thì số đó sẽ có giá trị từ bỏ 0 – 127, với bit 7 là high (1) thì số sẽ sở hữu được giá trị trường đoản cú 128 – 255.

Một trong số những cách đầu tiên để trình diễn số signed được điện thoại tư vấn là one’s complement. Với cách này thì sẽ triển khai đảo cục bộ bit để sở hữu được số âm.

Ví dụ: ví như số 25 =000110012 thì số -25 = 111001102. Vì đó một số trong những 8-bit one’s complement sẽ có được giá trị trường đoản cú -127 tới +127. MSB đã là bit sign (bit gồm dấu) bởi 1 nếu đó là số âm. Nặng nề ăn ở đoạn là nếu dùng dạng như này thì sẽ có 2 số 0 là +0 = 000000002, với –0 = 111111112. Điều này thì không xúc tích và ngắn gọn cho lắm. Hình như vấn đề quan trọng đặc biệt là số one’s complement không có dạng cơ bản. Two’s complement ra đời để khắc phục điều này.

Xem thêm: Giải Bài 4.4 Sbt Vật Lý 8 - Giải Sbt Vật Lý 8 Bài 4: Biểu Diễn Lực Chính Xác

Với two’s complement cách thực hiện giống với one’s complement, nhưng cộng thêm 1.

Ví dụ: giả dụ số 25 =000110012 thì -25 = 111001112.

Vậy quý hiếm của một vài signed 8-bit two’s complement là

N = -128•b7 + 64•b6 + 32•b5 + 16•b4 + 8•b3 + 4•b2 + 2•b1 + b0

Ta hoàn toàn có thể xác định được những thành phần cơ phiên bản của số 8-bit signed là -128, 64, 32, 16, 8, 4, 2, 1.

Chúng ta tiếp tục qua một vài ví dụ nữa xem sao

Ví dụ: giá trị của số 11100111 dưới dạng signed và unsigned integer

Giá trị Unsigned = 1 *27 + 1 *26 + 1 *25 + 0 *24 + 0 *23 + 1 *22 + 1 *21 + 1 *20 = 231Giá trị Signed = -1 *27 + 1 *26 + 1 *25 + 0 *24 + 0 *23 + 1 *22 + 1 *21 + 1 *20 = -25

Chuyển đổi số 45 decimal về 8-bit binary và hexadecimal

45=32+8+4+1, phải 45 = 001011012 = 0x2D.

Chuyển đổi số 200 decimal về 8-bit binary và hexadecimal

200=128+64+8, yêu cầu 200 = 110010002 = 0xC8.

Chuyển số signed 110110102 về decimal.

-128+64+16+8+2 = -38.

Giá trị của số signed và unsigned là khác nhau do MSB, dựa vào giá trị này thì máy vi tính không thể nói cho chúng ta biết được chính là số signed hay unsigned, vì thế thì fan lập trình phải ghi nhận được điều này bằng cách track áp dụng biến tài liệu 32-bit kiểu long

Words với Halfwords

Một halfword hoặc double byte gồm 16 bits, với từng bit b15,…,b0 là số nhị phân có mức giá trị là 0 hoặc 1.

*

Nếu halfword được dùng để biểu thị số unsigned thì giá bán trị của nó là

N = 32768•b15 + 16384•b14 + 8192•b13 + 4096•b12+ 2048•b11 + 1024•b10 + 512•b9 + 256•b8+ 128•b7 + 64•b6 + 32•b5 + 16•b4 + 8•b3 + 4•b2 + 2•b1 + b0

Có 65536 giá trị khác nhau của số 16-bit unsigned. Giá bán trị nhỏ nhất là 0 và lớn nhất là 65535.

Các yếu tắc cơ bạn dạng của số 16-bit unsigned là 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768

Ví dụ: giá trị của 00100001100001002 hoặc 0x2184 là 8192+256+128+4 hoặc 8580.

*

Nếu halfword được sử dụng để thể hiện số signed thì giá bán trị của nó là

N = -32768•b15 + 16384•b14 + 8192•b13 + 4096•b12+ 2048•b11 + 1024•b10 + 512•b9 + 256•b8+ 128•b7 + 64•b6 + 32•b5 + 16•b4 + 8•b3 + 4•b2 + 2•b1 + b0

Có 65536 giá trị khác nhau của số 16-bit unsigned. Giá trị nhỏ tuổi nhất là –32768 và lớn số 1 là 32767.

Các nguyên tố cơ bạn dạng của số 16-bit unsigned là 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, -32768

Ví dụ: cực hiếm của 11010000000001002 hoặc 0xD004 là –32768+16384+4096+4 hoặc –12284.

*

Lỗi thường gặp khi các bạn sử dụng những phép toán 16-bit trên các số 8-bit hoặc sử dụng các phép toán 8-bit trên các số 16-bit

Một word vào ARM Cortex-M sẽ tất cả 32 bits. Giống hệt như số unsigned cùng với 32 bit thì từng bit b31,…,b0 sẽ là số nhị phân và có mức giá trị 1 hoặc 0.

Xem thêm: Dế Mèn Phiêu Lưu Ký Full

Nếu số 32-bit được sử dụng để bộc lộ số unsigned integer, thì quý hiếm của số này là:

N = 231 • b31 + 230 • b30 + … + 2•b1 + b0 = sum(2i • bi) for i=0 khổng lồ 31

Có 232 số unsigned 32-bit khác nhau. Số nhỏ tuổi nhất là 0 và lớn nhất là 232-1. Ngưỡng của nó sẽ nằm trong tầm từ 0 cho tới 4 tỷ. Những thành phần cơ bản là 1, 2, 4, … , 229, 230, 231

Nếu số 32-bit được sử dụng để biểu thị số singed thì giá chỉ trị của nó là

N = -231 • b31 + 230 • b30 + … + 2•b1 + b0 = -231 • b31 + sum(2i • bi) for i=0 to 30

và các thành phần cơ phiên bản 1, 2, 4, … , 229, 230, -231

Khi lập trình C thì kiểu tài liệu ta hay được sử dụng là char short cùng long để khẳng định các số 8-bit,16-bit hoặc 32-bit, tuy thế với số đông complier của ARM thì int là 32 bit.

Tạm Kết

Vậy là ngừng được một số trong những khái niệm và những ví dụ minh họa về thông số và các cách biến đổi giữa những số nhị phân, thập phân, thập lục phân, các khái niệm về precision cùng byte, 2’s Complement cùng với signed và unsigned, word và halfword