Giá trị 0x55 trong hệ binary là bao nhiêu

Để chuyển từ hệ cơ số bất kỳ sang thập phân, nguyên tắc là cứ chia số đó lấy phần dư rồi tiếp tục chia phần nguyên lấy phần dư tiếp sau đó xếp thứ tự ngược từ dưới lên.

Lấy số 3295 [trong hệ thập phân] làm ví dụ:

3295 chia 2 = 1647.5 [1647 -> Dư 1]

1647 [phần nguyên] chia 2 = 823.5 -> Dư 1

823 chia 2 = 411.5 -> Dư 1

411 chia 2 = 205.5 -> Dư 1

205 chia 2 = 102.5 -> Dư 1

102 chia 2 = 51 -> Dư 0

51 chia 2 = 25.5 -> Dư 1

25 chia 2 = 12.5 -> Dư 1

12 chia 2 = 6 -> Dư 0

6 chia 2 = 3 -> Dư 0

3 chia 2 = 1.5 -> Dư 1

1 chia 2 = 0.5 -> Dư 1 [phần nguyên < 1 thì dừng]

Sắp xếp các số dư từ dưới lên trên ta được: 3295 [demical] = 110011011111 [binary].

Cũng với số này ta chuyển từ 10 sang thập lục phân thì như sau :

3295 chia 16 = 205.9375 [205 dư 15] tức là chữ số F trong hệ hexa đó

205 chia 16 = 12.8125 [12 dư 13] tức là D

12 chia 16 = 0.75 [0 dư 12] tức là C

Vậy số đó trong hệ hexa là CDF.

Đối với phần lẻ của số thập phân, chuyển sang nhị phân số lẻ được nhân với 2. Phần nguyên của kết quả sẽ là bit nhị phân, phần lẻ của kết quả lại tiếp tục nhân 2 cho đến khi phần lẻ của kết quả bằng 0.

Ví dụ: Chuyển số 0.62510 sang hệ nhị phân

  • 0.625 x 2 = 1.25, lấy số 1, phần lẻ 0.25
  • 0.25 x 2 = 0.5, lấy số 0, phần lẻ 0.5
  • 0.5 x 2 = 1.0, lấy số 1, phần lẻ 0. Kết thúc phép chuyển đổi. , lấy phần dư từ trên xuống

Với các hệ khác cũng tương tự, khỏi ví dụ nhé.

Nguyên tắc 2 : chuyển từ hệ cơ số bất kỳ ra thập phân

Có 1 số nhị phân A như sau:

A=anan-1an-2…a1.a0a-1a-2…a-m

Dấu chấm màu đỏ là dấu phân cách hàng thập phân. Giá trị của A được tính như sau:

A=an2n + an-12n-1 + an-22n-2 +…+a121 + a020 + a-12-1+ a-22-2 +…+ a-m2-m

Ví dụ về số nhị phân: chuyển số 1110110.110101 sang số thập phân

1110110.110101=1x26 + 1x25 + 1x24 + 0x23 + 1x22 + 1x21 + 0x20 + 1x2-1 +1x2-2 + 0x2-3 + 1x2-4 + 0x2-5 + 1x 2-6

\= 64 + 32 + 16 + 0 + 4 + 2 + 0 + 0.5 + 0.25 + 0 + 0.0625 + 0 + 0.015625 = 118.828125

Vậy 1110110.110101 2 \= 118.828125 10

Cái này tương đối dễ hiểu hơn cái trên, và không phải làm 2 công đoạn ngược nhau với phần nguyên và phần lẻ.

Nguyên tắc 3 : Chuyển nhanh các hệ cơ số là bội của 2

Có cái bảng các hệ cơ số theo thứ tự: nhị phân - thập lục - bát phân - thập phân sau đây

0000 | 0 | 0 | 0

0001 | 1 | 1 | 1

0010 | 2 | 2 | 2

0011 | 3 | 3 | 3

0100 | 4 | 4 | 4

0101 | 5 | 5 | 5

0110 | 6 | 6 | 6

0111 | 7 | 7 | 7

1000 | 8 | 10 | 8

1001 | 9 | 11 | 9

1010 | A | 12 | 10

1011 | B | 13 | 11

1100 | C | 14 | 12

1101 | D | 15 | 13

1110 | E | 16 | 14

1111 | F | 17 | 15

Ví dụ chuyển nhị phân sang thập lục phân :

110011011111b -> 1100 1101 1111 -> C D F [bảng thì tra hoặc học thuộc]

Quá trình ngược lại cũng tương tư từ C tra bảng ra 4 bit nhị phân nào.

Ở trên ta có thể áp dụng để chuyển qua lại giữa các giá trị nhị phân thập lục hoặc nhị phân bát phân. Muốn chuyển giữa thập lục và bát phân thì chuyển trung gian qua nhị phân.

Nguyên tắc 4 : Chuyển nhanh các hệ cơ số 10 với hệ nhị phân

Hãy lập một bảng sao cho giá trị cơ số^ số mũ >nửa giá trị cần đổi. Ví dụ bảng sau có thể đổi các giá trị lớn nhất là 128*2-1 =255 :

bạn chỉ việc so 35 xem số nào nhỏ hơn trong bảng giá trị rồi đánh giá trị 1 vào bảng rồi trừ, làm dần từ trái qua phải : 35-32-4-2-1 = 0 là sẽ có số nhị phân cần dùng.

Để chuyển từ 100011 sang 35 ở hệ thập nhân thì ta điền các giá trị vào hàng 3 [ở trên là so giá trị rồi mới điền và trừ còn ở đây điền trước rồi mới so giá trị] rồi cột nào có giá trị 1 thì cộng lại là sẽ ra ngay.

******

*

---------------------------------

*

*******

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

Bảng 1. Bảng chuyển đổi hệ cơ số thập phân – nhị phân – bác phân – thập lục phân cơ bản

Bảng trên có thể giúp các bạn chuyển đổi nhanh qua lại giữa các hệ cơ số.

1. Chuyển đổi từ hệ cơ số thập phân sang nhị phân và ngược lại [DEC BIN].

ØTừ thập phân sang nhị phân.

Đầu tiên chúng ta chia số cần chuyển cho 2 và lấy phần dư, rối tiếp tục chia phần nguyên lấy phần dư, sau đó sắp xếp thứ tự phần dư theo thứ tự ngược từ dưới lên.

VD: Chuyển 2371 [hệ thập phân] sang hệ nhị phân?

2371 chia 2 = 1185.5 [1185 -> dư 1]

1185 chia 2 = 592 -> dư 1

[phần nguyên]

592 chia 2 = 296 -> dư 0

296 chia 2 = 148 -> dư 0

148 chia 2 = 74 -> dư 0

74 chia 2 = 37 -> dư 0

37 chia 2 = 18 -> dư 1

18 chia 2 = 9 -> dư 0

9 chia 2 = 4 -> dư 1

4 chia 2 = 2 -> dư 0

2 chia 2 = 1 -> dư 0

1 chia 2 = 0 -> dư 1

Sắp xếp thứ tự số dư từ dưới lên trên: 2371DEC = 100101000011BIN

Ø Từ nhị phân sang thập phân.

Muốn chuyển đổi cơ số từ hệ nhị phân sang thập phân, ta lấy các chữ số trong phần nguyên của số cần chuyển nhân lần lượt với 2 mũ 0,1,2,3,…tăng dần từ phải qua trái. Còn phần nguyên của số cần chuyển ta sẽ nhân lần lượt với 2 mũ -1, -2, -3, … giảm dần từ phải qua trái. Phần nguyên và phần thập phân được ngăn cách nhau bằng dấu chấm “.”

VD: Chuyển 10101100.01101BIN sang số thập phân?

Áp dụng như trên ta được:

10101100.01101BIN= 1.27 + 0. 26 + 1.25 + 0.24 + 1.23 + 1.22 + 0.21 +0.20 + 0.2-1+1.2-2 + 1.2-3 + 0.2-4 + 1.2-5 \= 128 + 0 + 32 + 0 + 8 + 4+ 0 + 0 + 0 + 0.25 + 0.125 + 0 + 0.0315 = 174.40625

Vậy 10101100.01101BIN = 174.40625DEC

2. Chuyển đổi từ hệ cơ số thập phân sang bác phân và ngược lại [DEC OCT].

Ø Từ thập phân sang bác phân.

Cũng giống như cách chuyển đổi cơ số từ thập phân sang nhị phân, để chuyển từ thập phân sang bác phân ta cũng chia số cần chuyển cho 8 được phần dư [giá trị dư từ 1->7], sau đó cũng lấy phần nguyên chia tiếp và lấp phần dư, kết quả là phần dư được sắp xếp theo thứ tự từ dưới lên trên.

VD: Chuyển số 2764 [hệ thập phân] sang hệ bác phân?

2764 chia 8 = 345.5 [345 -> dư 4[lấy phần lẻ nhân với 8]]

345 chia 8 = 43.125 [43 -> dư 1]

43 chia 8 = 5.375 [ 5 -> dư 3]

5 chia 8 = 0 -> dư 5

Sắp xếp thứ tự từ dưới lên trên: 2764DEC = 5314OCT

Ø Từ bác phân sang thập phân.

Tương tự hệ nhị phân, để chuyển đổi cơ số từ hệ bác phân sang thập phân, ta lấy các chữ số trong phần nguyên của số cần chuyển nhân lần lượt với 8 mũ 0,1,2,3,…tăng dần từ phải qua trái. Còn phần nguyên của số cần chuyển ta sẽ nhân lần lượt với 8 mũ -1, -2, -3, … giảm dần từ phải qua trái.

VD: Chuyển 5314.17OCT thành hệ thập phân?

5314.17OCT = 5.83 + 3. 82 + 1. 81 +4. 80 + 1. 8-1 +7. 8-2

\= 2560 + 192 + 8 + 4 + 0.125 + 0.109375 = 2764.234375DEC

3. Chuyển đổi từ hệ cơ số thập phân sang thập lục phân và ngược lại [DEC HEX].

Ø Từ thập phân sang thập lục phân phân.

Việc chuyển đổi này cũng tương tự như nhị phân và bác phân. Cụ thể ta xét ví dụ sau đây: [sử dụng bảng 1]

3295 chia 16 = 205.9375 [205 -> dư 15] tức là chữ F

205 chia 16 = 12.8125 [12 -> dư 13] tức là D

12 chia 16 = 0 [dư 12] tức là C

Vậy 3295DEC = CDFHEX

Ø Từ thập lục phân sang thập phân.

Tương tự ta nhân từng số với 16 mũ ……

VD: CDF.91HEX = C.162 + D.161 +F.160 + 9.16-1 + 1.16-2

\= 12.162 + 13.161 +15.160 + 9.16-1 + 1.16-2

\= 3072 + 208+ 15 +0.5625 + 0.00390625

\= 3295.56640625

Vậy CDF.91HEX = 3295.56640625DEC

4. Các chuyển đổi khác

Ø Từ nhị phân sang bác phân

Để chuyển đổi cơ số từ hệ nhị phân sang bác phân ta gom 3 chữ số của số cần chuyển theo thứ tự lần lượt từ phải sang trái, sau đó sử dụng bảng 1 để chuyển đổi thành kết quả mong muốn.

VD:

100110001011010BIN = 100 110 001 011 010

\= 4 6 1 3 2

Vậy 100110001011010BIN = 46132OCT

Ø Từ nhị phân sang thập lục phân

Tương tự như trên,muốn chuyển đồi từ hệ nhị phân sang thập lục phân, ta gom 4 chữ số của số cần chuyển theo thứ tự lần lượt từ phải sang trái, sau đó sử dụng bảng 1.

VD:

100110001011010BIN = 0100 1100 0101 1010 [nếu các số cuối cùng bên trái không đủ 4 chữ số thì mặc định ta thêm vào trước đó các chữ số 0]

\= 4 C 5 A

Vậy 100110001011010BIN = 4C5AHEX

Ø Từ bác phân sang thập lục phân và ngược lại

Muốn chuyển từ hệ bác phân sang hệ thập lục phân hoặc từ thập lục phân sang bác phân, trước tiên ta phải chuyển số cần chuyển sang hệ cơ số 2 [hệ nhị phân], sau đó mới chuyển sang hệ thập lục phân hay bác phân theo các bước phía trên.

VD:

46132OCT = 100 110 001 011 010BIN = 0100 1100 0101 1010BIN

\= 4C5AHEX

************************

**********

*

------------------------------------------

*

*******

************************

Các hệ số và cách chuyển đổi

Trong bài này mình sẽ giới thiệu với các bạn một số khái niệm về kiểu số cơ bản thường sử dụng trong lập trình nhúng

  • * Hiểu được số nhị phân [binary], số thập lục phân[hexadecimal], kiểu số nguyên có dấu và không dấu [signed và unsigned integers]
    • Cách chuyển đổi giữa các kiểu số

Chúng ta đã quá 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 cũng tương tự nhưng chỉ có 2 giá trị là {0,1} và hệ thập lục phân sẽ sử dụng các số 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 bạn có thể nắm được một số cách chuyển đổ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-2

Hệ nhị phân:

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

Hệ thập lục phân:

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

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

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

Chuyển từ nhị phân sang thập phân

Ví dụ: Giá trị thập phân của số nhị phân 8 bit 111111112 là bao nhiêu ?

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ụ: Giá trị 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ừ thập phân sang nhị phân

Ví dụ: Giá trị nhị phân của số thập phân 123

123/2 = 61 dư 1

61/2 = 30 dư 1

30/2 = 15 dư 0

15/2 = 7 dư 1

7/2 = 3 dư 1

3/2 = 1 dư 1

1/2 = 0 dư 1

Giá trị số nhị phân là 01111011

Ví dụ: Giá trị nhị phân của số thập phân 254

254/2 = 127 dư 0

127/2 = 63 dư 1

63/2 = 31 dư 1

31/2 = 15 dư 1

15/2 = 7 dư 1

7/2 = 3 dư 1

3/2 = 1 dư 1

3/2 = 1 dư 1

Giá trị số nhị phân là 11111110

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

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

Với số thập lục phân sẽ có giá trị là các số {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. Trong các máy tính thì không phân biệt khi viết hoa hoặc viết thường các chữ cái trong số thập lục phân nên {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} và {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 gọi số thập lục phân là số “hex” và để phân biệt với các số khác thì thường có 0x hoặc $ ở phía trước số thập lục phân, trong C thường dùng là 0x. Các số thập lục phân cơ bản 160, 161, 162, 163,… hoặc 1, 16, 256, 4096,…

Nibble thường được dùng để định nghĩa 4 bit nhị phân hoặc 1 số thập lục phân [16 = 24], mỗi 4-bit nibble này sẽ tương ứng với 1 số hex như hình sau

Để chuyển từ số nhị phân[Binary] về thập lục phân[Hexadecimal] và ngược lại thì chúng ta sẽ xem hình minh họa sau

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

Bước 1: Chuyển từng số trong số hex sang nibble.

Bước 2: 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 chia từng số hex ra và chuyển về số nhị phân 0x4 = 01002 và 0x0 = 00002 . Sau đó kết hợp 2 số này lại thành 1 là 010000002 . Vậy 0x40 = 010000002

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

Đầu tiên chia từng số hex ra và chuyển về số nhị phân 0x6 = 01102 và 0x3 = 00112 ,0xF = 11112 . Sau đó kết hợp 3 số này lại thành 1 là 0110001111112 . Vậy 0x63F = 0110001111112

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

Bước 1: Chia các số nhị phân thành các nibble hợp lý.

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

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

Đầu tiên chia 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ố này lại thành 1 là 0x45. Vậy 010001012 \= 0x45

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

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

Vậy giá trị thập phân của số thập lục phân 8 bit 0xFF là bao nhiêu ?

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

Precision có ý nghĩa là số giá trị riêng biệt hoặc các giá trị khác biệt, nó được biểu thị dưới dạng alternative[số thay thế], byte, hoặc binary bit [bit nhị phân].

Ví dụ: Định dạng của một số 8-bit có thể biểu diễn được 256 số khác nhau. Cụ thể với 8-bit của DAC[chuyển đổi số tương tự] có thể tạo ra được 256 giá trị analog output hoặc với 8-bit ADC[chuyển đổi tương tự số] thì có thể đo được 256 giá trị khác nhau từ analog input.

Ta có thể xem bảng sau để biết được mối quan hệ giữa precision trong bit nhị phân và trong alternative. Ký hiệu [[x]] được định nghĩa là giá trị integer lớn nhất. Cột byte là số byte mà bộ nhớ sử dụng để lưu trữ

Ví dụ:[[2.1]], [[2.9]] và [[3.0]] sẽ bằng 3.

Một byte sẽ bao gồm 8-bit với từng bit từ b7,…,b0 là các số nhị phân có giá trị là 1 hoặc 0. b7 thường được gọi là most significant bit [MSB] hay còn gọi là bit có trọng số lớn nhất, và b0 là least significant bit [LSB] hay bit có trọng số nhỏ nhất.

Nếu 1 byte được dùng để biểu diễn số unsigned thì giá trị 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 lưu ý là trọng số của bit n là 2n và có tới 256 số unsigned 8-bit khác nhau, số nhỏ nhất là 0 và số lớn nhất là 255.

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

Ngoài ra với LSB thì ta có thể biết được một số là số chẵn[even] hay lẻ [odd]

Ví dụ:

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

  • * Nếu bit nhị phân trọng số thấp là 0 thì đó là số chẵn.
    • Nếu bit ngoài cùng bên phải của n bit là 0 thì số thì số đó chia hết cho 2n.
    • Với một số 8-bit unsigned, nếu bit 7 là low [0] thì số đó sẽ có giá trị từ 0 – 127, và bit 7 là high [1] thì số sẽ có giá trị từ 128 – 255.

Một trong những cách đầu tiên để biểu diễn số signed được gọi là one’s complement. Với cách này thì sẽ thực hiện đảo toàn bộ bit để có được số âm.

Ví dụ: Nếu số 25 =000110012 thì số -25 = 111001102. Do đó một số 8-bit one’s complement sẽ có giá trị từ -127 tới +127. MSB sẽ là bit sign [bit có dấu] bằng 1 nếu đó là số âm. Khó ăn ở chỗ là nếu dùng dạng như này thì sẽ có 2 số 0 là +0 = 000000002, và –0 = 111111112. Điều này thì không logic cho lắm. Ngoài ra vấn đề quan trọng 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.

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ụ: Nếu số 25 =000110012 thì -25 = 111001112.

Vậy giá trị của một số signed 8-bit two’s complement là

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

Ta có thể xác định được các thành phần cơ 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 số 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 \= 231

Giá 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, nên 45 = 001011012 \= 0x2D.

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

200=128+64+8, nên 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 tính không thể nói cho chúng ta biết được đó là số signed hay unsigned, do đó thì người lập trình phải biết được điều này bằng cách track sử dụng biến dữ liệu 32-bit kiểu long

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

Nếu halfword được dùng để biểu thị số unsigned thì giá 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ỏ nhất là 0 và lớn nhất là 65535.

Các thành phần cơ bản 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 dùng để biểu thị số signed thì giá 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ỏ nhất là –32768 và lớn nhất là 32767.

Các thành phần cơ bản 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 11010000000001002 hoặc 0xD004 là –32768+16384+4096+4 hoặc –12284.

Lỗi thường gặp khi bạn sử dụng các 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 trong ARM Cortex-M sẽ gồm 32 bits. Giống như số unsigned với 32 bit thì mỗi bit b31,…,b0 sẽ là số nhị phân và có giá trị 1 hoặc 0.

Nếu số 32-bit được dùng để biểu thị số unsigned integer, thì giá trị của số này là:

N = 231 • b31 + 230 • b30 + … + 2•b1 + b0 \= sum[2i • bi] for i=0 to 31

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

Nếu số 32-bit được dùng để biểu thị số singed thì giá 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ơ bản {1, 2, 4, … , 229, 230, -231}

Khi lập trình C thì kiểu dữ liệu ta thường dùng là char short và long để xác định các số 8-bit,16-bit hoặc 32-bit, nhưng với hầu hết complier của ARM thì int là 32 bit.

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

Chủ Đề