Bạn có thể chuyển đổi float thành nhị phân trong Python không?

Cho đến bây giờ chúng ta đã xử lý các số nguyên. Mở rộng điều này thành phân số không quá khó vì chúng tôi thực sự chỉ sử dụng các cơ chế tương tự mà chúng tôi đã quen thuộc. Phân số nhị phân giới thiệu một số hành vi thú vị như chúng ta sẽ thấy bên dưới

Trong phần này, chúng ta sẽ bắt đầu bằng cách xem cách chúng ta biểu diễn phân số ở dạng nhị phân. Sau đó, chúng ta sẽ xem xét dấu phẩy động nhị phân, đây là phương tiện biểu diễn các số cho phép chúng ta biểu diễn cả phân số rất nhỏ và số nguyên rất lớn. Đây là phương tiện mặc định mà máy tính sử dụng để làm việc với các loại số này và thực sự được xác định chính thức bởi IEEE. Nó được gọi là IEEE 754

Nhị phân là một hệ thống số vị trí. Nó cũng là một hệ thống số cơ sở. Để biết thêm về điều này, hãy đọc Giới thiệu về hệ thống số của chúng tôi. Khi chúng ta di chuyển một vị trí [hoặc chữ số] sang trái, công suất chúng ta nhân cơ số [2 ở dạng nhị phân] tăng thêm 1. Khi chúng tôi di chuyển sang bên phải, chúng tôi giảm 1 [thành số âm]

Vì vậy, trong số thập phân số 56. 482 thực sự được dịch là

5 * 101506 * 10064 * 10-14/108 * 10-28/1002 * 10-32/1000

Trong hệ nhị phân, đó là quá trình tương tự, tuy nhiên, chúng tôi sử dụng lũy ​​thừa của 2 để thay thế

Vì vậy, trong hệ nhị phân, số 101. 101 dịch là

1 * 2240 * 2101 * 2011 * 20-11/2 * 2-201 * 2-31/8

Trong số thập phân, điều đó khá dễ dàng, khi chúng ta di chuyển từng vị trí trong phân số sang bên phải, chúng ta thêm 0 vào mẫu số. Trong hệ nhị phân, chúng ta nhân đôi mẫu số

Khi bạn di chuyển, mẫu số tăng gấp đôi, vì vậy chúng tôi kết thúc với các giá trị mẫu số sau. 2-11/22-21/42-31/82-41/162-51/322-61/64

và như thế

Chuyển đổi phân số nhị phân thành phân số thập phân chỉ đơn giản là thêm các giá trị tương ứng cho mỗi bit là 1

Phân số chúng ta không thể đại diện

Trong số thập phân, có nhiều phân số khác nhau mà chúng ta có thể không biểu diễn chính xác. 1/3 là một trong số này. Chúng tôi có thể đến rất gần [ví dụ:. 0. 3333333333] nhưng chúng tôi sẽ không bao giờ biểu thị chính xác giá trị. Điều này cũng giống với phân số nhị phân, tuy nhiên, số lượng giá trị mà chúng tôi có thể không biểu thị chính xác thực sự lớn hơn. Đây thường không phải là một vấn đề vì chúng tôi có thể biểu thị một giá trị ở đủ vị trí nhị phân để nó đủ gần cho các mục đích thực tế. Chúng ta sẽ quay lại vấn đề này khi xem xét chuyển đổi sang phân số nhị phân bên dưới

điểm nhị phân

Cho đến giờ chúng ta đã biểu diễn các phân số nhị phân bằng cách sử dụng điểm nhị phân. Điều này tốt khi chúng ta làm việc với mọi thứ bình thường nhưng trong máy tính, điều này không khả thi vì nó chỉ có thể hoạt động với 0 và 1. Chúng tôi giải quyết vấn đề này bằng cách thống nhất vị trí của điểm nhị phân

Vì vậy, ví dụ, nếu chúng ta đang làm việc với các số 8 bit, có thể đồng ý rằng điểm nhị phân sẽ được đặt giữa bit thứ 4 và thứ 5

01101001 sau đó được coi là thực sự đại diện cho 0110. 1001

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

Rất nhiều thao tác khi làm việc với nhị phân chỉ đơn giản là ghi nhớ và áp dụng một tập hợp các bước đơn giản. Chuyển đổi phân số thập phân thành nhị phân không khác

Cách tiếp cận đơn giản nhất là phương pháp mà chúng ta lặp lại phép nhân phân số với 2 và ghi lại xem chữ số ở bên trái của dấu thập phân là 0 hay 1 [nghĩa là nếu kết quả lớn hơn 1], sau đó loại bỏ 1 nếu đó là. Khi bạn đã hoàn tất, bạn đọc giá trị từ trên xuống dưới. Hãy xem xét một số ví dụ. Ví dụ này kết thúc sau 8 bit ở bên phải của điểm nhị phân nhưng bạn có thể tiếp tục bao lâu tùy thích. [hoặc cho đến khi bạn kết thúc bằng 0 trong hệ số nhân hoặc mẫu bit lặp lại]

0

Kết quả ở dạng nhị phân

dấu phẩy động

Những gì chúng ta đã xem xét trước đây được gọi là phân số nhị phân điểm cố định. Đây là một cách thuận tiện để biểu diễn các số nhưng ngay khi số mà chúng ta muốn biểu diễn là rất lớn hoặc rất nhỏ, chúng ta thấy rằng chúng ta cần một số lượng rất lớn các bit để biểu diễn chúng. Nếu chúng ta muốn biểu diễn giá trị thập phân 128, chúng ta cần 8 chữ số nhị phân [ 10000000 ]. Đó là nhiều hơn gấp đôi số chữ số để biểu thị cùng một giá trị. Nó chỉ trở nên tồi tệ hơn khi chúng ta tiến xa hơn từ con số không

Để giải quyết vấn đề này, chúng tôi sử dụng một phương pháp biểu diễn các số được gọi là dấu phẩy động. Dấu phẩy động khá giống với ký hiệu khoa học như một phương tiện biểu diễn các số. Tuy nhiên, chúng tôi mất một chút độ chính xác khi xử lý các giá trị rất lớn hoặc rất nhỏ thường được chấp nhận. Ở đây tôi sẽ nói về tiêu chuẩn IEEE cho số dấu chấm động [vì nó gần như là tiêu chuẩn thực tế mà mọi người sử dụng]

Nhắc lại cho tôi cách ký hiệu khoa học hoạt động

Một số bạn có thể khá quen thuộc với ký hiệu khoa học. Một số bạn có thể nhớ rằng bạn đã học nó một thời gian trước nhưng muốn ôn lại. Hãy đi qua cách nó hoạt động

Ở trên 1. 23 là cái được gọi là phần định trị [hoặc nghĩa là] và 6 là cái được gọi là số mũ. Phần định trị luôn được điều chỉnh sao cho chỉ có một chữ số duy nhất [không phải số 0] ở bên trái dấu thập phân. Số mũ cho chúng ta biết có bao nhiêu nơi để di chuyển điểm. Trong trường hợp này, chúng tôi di chuyển nó 6 vị trí sang phải. Nếu chúng ta làm cho số mũ âm thì chúng ta sẽ di chuyển nó sang trái

Nếu chúng ta muốn đại diện cho 1230000 trong ký hiệu khoa học, chúng ta làm như sau

  • Điều chỉnh số sao cho chỉ có một chữ số ở bên trái dấu thập phân. 1. 23
  • Để tạo số mới này, chúng tôi đã di chuyển dấu thập phân 6 vị trí. Điều này trở thành số mũ
  • Do đó, trong ký hiệu khoa học, điều này trở thành. 1. 23 x 106

Bây giờ giống nhau trong nhị phân

Chúng tôi có thể làm tương tự trong hệ nhị phân và điều này tạo thành nền tảng cho số dấu phẩy động của chúng tôi

Ở đây, chúng ta đang di chuyển không phải là dấu thập phân mà là dấu nhị phân và vì nó di chuyển nên được gọi là dấu phẩy động. Những gì chúng ta sẽ xem xét bên dưới được gọi là Tiêu chuẩn IEEE 754 để biểu diễn các số dấu phẩy động. Tiêu chuẩn chỉ định số lượng bit được sử dụng cho từng phần [số mũ, phần định trị và dấu] và thứ tự chúng được biểu diễn

Không có gì ngăn cản bạn biểu diễn dấu phẩy động bằng hệ thống của riêng bạn, tuy nhiên, hầu hết mọi người đều sử dụng IEEE 754. Điều này bao gồm các nhà sản xuất phần cứng [bao gồm cả CPU] và có nghĩa là mạch điện cụ thể để xử lý các số dấu phẩy động IEEE 754 tồn tại trong các thiết bị này. Bằng cách sử dụng tiêu chuẩn để biểu thị số của bạn, mã của bạn có thể sử dụng điều này và hoạt động nhanh hơn rất nhiều. Điều đó cũng có nghĩa là khả năng tương tác được cải thiện vì mọi người đều đại diện cho các con số theo cùng một cách

Tiêu chuẩn chỉ định các định dạng sau cho số dấu phẩy động

Độ chính xác đơn, sử dụng 32 bit và có bố cục sau

  • 1 bit cho dấu của số. 0 có nghĩa là tích cực và 1 có nghĩa là tiêu cực
  • 8 bit cho số mũ
  • 23 bit cho lớp phủ

Độ chính xác kép, sử dụng 64 bit và có bố cục sau

  • 1 bit cho dấu của số. 0 có nghĩa là tích cực và 1 có nghĩa là tiêu cực
  • 11 bit cho số mũ
  • 52 bit cho lớp phủ

ví dụ. 0 00011100010 0100001000000000000001110100000110000000000000000000

Độ chính xác kép có nhiều bit hơn, cho phép biểu diễn các số lớn hơn và nhỏ hơn nhiều. Vì phần định trị cũng lớn hơn nên mức độ chính xác cũng tăng lên [hãy nhớ rằng nhiều phân số không thể được biểu diễn chính xác ở dạng nhị phân]. Trong khi các số dấu phẩy động chính xác kép có những ưu điểm này, chúng cũng đòi hỏi nhiều sức mạnh xử lý hơn. Với việc tăng sức mạnh xử lý của CPU và việc chuyển sang điện toán 64 bit, nhiều ngôn ngữ lập trình và phần mềm chỉ được mặc định ở độ chính xác gấp đôi

Chúng ta sẽ xem xét cách hoạt động của các số dấu phẩy động có độ chính xác đơn bên dưới [chỉ vì nó dễ dàng hơn]. Độ chính xác kép hoạt động giống hệt nhau, chỉ với nhiều bit hơn

Dấu hiệu bit

Đây là bit đầu tiên [bit còn lại nhiều nhất] trong số dấu phẩy động và nó khá dễ dàng. Như đã đề cập ở trên nếu số của bạn là số dương, hãy biến bit này thành 0. Nếu số của bạn là số âm thì hãy biến nó thành 1

số mũ

Số mũ trở nên thú vị một chút. Hãy nhớ rằng số mũ có thể dương [để biểu thị số lớn] hoặc âm [để biểu thị số nhỏ, tức là phân số]. Ấn tượng đầu tiên của bạn có thể là phần bù của hai sẽ là lý tưởng ở đây nhưng tiêu chuẩn có cách tiếp cận hơi khác. Điều này được thực hiện vì nó cho phép xử lý và thao tác các số dấu phẩy động dễ dàng hơn

Với 8 bit và nhị phân không dấu, chúng ta có thể biểu diễn các số từ 0 đến 255. Để cho phép các số âm trong dấu phẩy động, chúng tôi lấy số mũ của mình và thêm 127 vào số đó. Phạm vi số mũ chúng ta có thể đại diện trở thành 128 đến -127. Tuy nhiên, 128 không được phép và được giữ như một trường hợp đặc biệt để biểu thị một số số đặc biệt nhất định như được liệt kê thêm bên dưới

Ví dụ. hãy cùng nói nào

  • Chúng tôi muốn số mũ của chúng tôi là 5. 5 + 127 là 132 nên số mũ của chúng ta trở thành - 10000100
  • Chúng tôi muốn số mũ của chúng tôi là -7. -7 + 127 là 120 nên số mũ của chúng ta trở thành - 01111000

Một lợi ích phụ của phương pháp này là nếu bit bên trái nhiều nhất là 1 thì chúng ta biết rằng đó là số mũ dương và nó là một số lớn được biểu diễn và nếu nó là 0 thì chúng ta biết số mũ là âm và nó là

Rất dễ bị nhầm lẫn ở đây vì bit dấu cho toàn bộ số dấu phẩy động có 0 cho số dương và 1 cho số âm nhưng điều này bị đảo ngược đối với số mũ do nó sử dụng cơ chế bù. Đó chỉ là điều bạn phải ghi nhớ khi làm việc với các số dấu phẩy động

bọ ngựa

Trong ký hiệu khoa học, hãy nhớ rằng chúng ta di chuyển điểm sao cho chỉ có một chữ số [khác không] ở bên trái của điểm đó. Khi chúng tôi làm điều này với nhị phân, chữ số đó phải là 1 vì không có giải pháp thay thế nào khác. Những người tạo ra tiêu chuẩn dấu chấm động đã sử dụng điều này để làm lợi thế của họ để có thêm một ít dữ liệu được biểu thị bằng một số

Sau khi chuyển đổi một số nhị phân thành ký hiệu khoa học, trước khi lưu trữ trong phần định trị, chúng tôi bỏ số 1 ở đầu. Điều này cho phép chúng tôi lưu trữ thêm 1 bit dữ liệu trong phần định trị

ví dụ

Nếu số của chúng tôi để lưu trữ là 111. 00101101 thì trong ký hiệu khoa học nó sẽ là 1. 1100101101 với số mũ là 2 [chúng tôi đã di chuyển điểm nhị phân sang trái 2 vị trí]. Chúng tôi bỏ dẫn đầu 1. và chỉ cần lưu trữ 1100101101

Nếu số của chúng tôi để lưu trữ là 0. 0001011011 thì trong ký hiệu khoa học nó sẽ là 1. 011011 với số mũ là -4 [chúng tôi đã di chuyển điểm nhị phân sang phải 4 vị trí]. Chúng tôi bỏ dẫn đầu 1. và chỉ cần lưu trữ 011011

Trường hợp đặc biệt

Có một vài trường hợp đặc biệt để xem xét

Số không

Số 0 được biểu diễn bằng cách đặt bit dấu là 1 hoặc 0 và tất cả các bit khác là 0

ví dụ. 1 00000000 00000000000000000000000 hoặc 0 00000000 00000000000000000000000

Đây sẽ bằng một phần định trị là 1 với số mũ là -127, đây là số nhỏ nhất mà chúng ta có thể biểu thị trong dấu phẩy động. Nó không phải là 0 nhưng nó khá gần và các hệ thống biết diễn giải nó chính xác bằng 0

vô cực

Có thể đại diện cho cả vô cực tích cực và tiêu cực. Nó chỉ đơn giản là vấn đề chuyển đổi bit dấu

Để đại diện cho vô hạn, chúng ta có một số mũ của tất cả 1 với một phần định trị của tất cả 0

ví dụ. 0 11111111 00000000000000000000000 hoặc 1 11111111 00000000000000000000000

Không phải là một con số

Điều này được sử dụng để thể hiện rằng một điều gì đó đã xảy ra dẫn đến một con số có thể không được tính toán. Một phép chia cho 0 hoặc căn bậc hai của một số âm chẳng hạn. Điều này được biểu thị bằng một số mũ tất cả là 1 và một phần định trị là sự kết hợp của 1 và 0 [nhưng không phải tất cả 0 vì điều này sau đó sẽ biểu thị vô cùng]. Bit dấu có thể là 1 hoặc 0

ví dụ. 0 11111111 00001000000000100001000 hoặc 1 11111111 11000000000000000000000

Mẫu 1 và 0 thường được sử dụng để chỉ ra bản chất của lỗi, tuy nhiên điều này do lập trình viên quyết định vì không có danh sách mã lỗi chính thức

Tóm tắt

Zero0 00000000 0000000000000000000000000

Chuyển đổi sang dấu phẩy động

Chuyển đổi một số thành dấu phẩy động bao gồm các bước sau

  • Đặt bit dấu - nếu số dương, đặt bit dấu thành 0. Nếu số âm, đặt nó thành 1
  • Chia số của bạn thành hai phần - phần nguyên và phần phân số
  • Chuyển đổi thành nhị phân - chuyển đổi hai số thành nhị phân rồi nối chúng lại với nhau bằng một điểm nhị phân
  • Tính ra số mũ - Điều này được thực hiện bằng cách tìm ra bao nhiêu khoảng cách mà điểm nhị phân cần được di chuyển để nó ở ngay sau số 1 đầu tiên trong kết quả. Nếu bạn di chuyển điểm nhị phân sang trái thì số này là số dương. Nếu bạn di chuyển nó sang bên phải thì số âm. Thêm 127 vào số này sau đó chuyển đổi thành nhị phân
  • Định dạng phần định trị - Điều này được thực hiện bằng cách bỏ số 1 đầu tiên vào số và ghi 23 bit tiếp theo

Hãy làm việc thông qua một vài ví dụ để thấy điều này trong thực tế

Kết quả ở dạng nhị phân

Để chuyển đổi từ dấu phẩy động trở lại số thập phân, chỉ cần thực hiện các bước ngược lại

Các hoạt động

Vì vậy, cách tốt nhất để học những thứ này là thực hành nó và bây giờ chúng tôi sẽ giúp bạn làm điều đó

Đối với hai hoạt động đầu tiên, phân số đã được làm tròn thành 8 bit. Số của bạn có thể hơi khác so với kết quả hiển thị do làm tròn kết quả. Điều này là tốt

Bạn có thể chuyển đổi số float thành số nhị phân không?

Để chuyển đổi phần phân số thành nhị phân, nhân phần phân số với 2 và lấy một bit xuất hiện trước dấu thập phân . Thực hiện theo quy trình tương tự với sau dấu thập phân [. ] một phần cho đến khi nó trở thành 1. 0.

Bạn có thể chuyển đổi float thành số nguyên trong Python không?

Chuyển đổi số float thành số nguyên . int[] Python also has a built-in function to convert floats to integers: int[] . Trong trường hợp này, 390. 8 sẽ được chuyển thành 390. Khi chuyển đổi số float thành số nguyên bằng hàm int[], Python sẽ cắt phần thập phân và số còn lại của số float để tạo số nguyên.

Dấu phẩy động nhị phân trong Python là gì?

Số dấu phẩy động được biểu diễn trong phần cứng máy tính dưới dạng phân số cơ số 2 [nhị phân] . Ví dụ, phân số thập phân 0. 125 có giá trị 1/10 + 2/100 + 5/1000 và theo cách tương tự, phân số nhị phân 0. 001 có giá trị 0/2 + 0/4 + 1/8.

Một float có thể chuyển đổi thành chuỗi Python không?

Chúng ta cũng có thể chuyển đổi một số float thành một chuỗi bằng cách sử dụng hàm str[] . Điều này có thể được yêu cầu trong các tình huống mà chúng tôi muốn nối các giá trị float.

Chủ Đề