2011-11-18 59 views
8

Tôi chỉ đang học về nhị phân và byte. Tôi hiểu rằng 8 bit tạo nên một byte và một byte có thể có 256 khả năng. Điều tôi bối rối về điều này là:Chính xác byte là gì và nó phải làm gì với nhị phân?

byte[] b = new byte[] { 85, 85, 67, 75 }; 

85 hoặc bất kỳ số nào ở trên phải làm với nhị phân. Chỉ đơn giản là một cái gì đó không hoàn toàn nhấp vào trong tâm trí của tôi.

+12

"Không có câu hỏi quá đơn giản". "Không có câu hỏi quá đơn giản". "Không có câu hỏi quá đơn giản". Nó không hoạt động. –

+3

'85' không liên quan gì đến 'binary', bởi vì nó là' decimal'. '85 cơ sở 10' ==' 1010101 cơ sở 2'. Nó chỉ là một cách để đại diện cho một số – Rob

+0

Đó không phải là khối mã chỉ khai báo một mảng byte và mỗi số đại diện cho một byte khác nhau? – Ari

Trả lời

12

Nhị phân là cách mọi thứ được lưu trữ bên trong máy tính. Ones và zeros, on and off, true và false, sự hiện diện hay vắng mặt của dòng điện. This Wikipedia article cung cấp cho nó một điều trị khá kỹ lưỡng.

Biểu diễn như "85" trong ví dụ của bạn là cách một byte là được định dạng để thuận tiện cho chúng tôi với tư cách là người đọc của con người. Nó có thể được định dạng trong hệ thập lục phân (cơ số 16) là "55", trong bát phân (cơ sở 8) là "125" trong nhị phân là "1010101", hoặc thậm chí "11" trong cơ sở-84 nếu bạn nghiêng. Tất cả đều có cùng ý nghĩa.

+5

Xin lỗi để mâu thuẫn với bạn, nhưng một số không phải là sự vắng mặt của dòng điện, nó chỉ là một số tiền khác nhau của nó. Không phải OP có thể quan tâm đến điều đó. –

+1

@ Chris: Tất nhiên ... trạng thái logic cao và thấp. Tôi đơn giản hơn. –

+1

+1 Câu hỏi này chỉ la hét cho Wikipedia (không phải MSDN) – sq33G

3

A byte trong C# chỉ là giá trị số nguyên 8 bit. Ở trên, bạn đang đại diện cho 4 số trong một mảng - điều này thực sự không khác với nó sẽ là nếu bạn sử dụng int, ngoại trừ các con số chiếm 1/4 của tổng không gian trong bộ nhớ.

Nó thực sự không liên quan gì đến "nhị phân" - ngoài biểu thức phổ biến nhất được sử dụng cho dữ liệu nhị phân. Điều này là do hầu hết các hệ thống điều về một "byte" tại một thời điểm, đó là một khối dữ liệu 8 bit. Như vậy, một byte là một cách phổ biến để biểu diễn dữ liệu này nếu bạn đang làm một cái gì đó hoạt động với thông tin nhị phân thô.

Lớp BitConverter có các thường trình để chuyển từ mảng byte sang các loại khác và ngược lại. Ví dụ: nó có thể take 4 bytes and turn it into an Int32 giá trị hoặc đi theo cách khác xung quanh. Hãy nhớ rằng - tất cả dữ liệu được lưu trữ chỉ là bộ nhớ - bạn chỉ lưu một chuỗi các bit (1 và 0) theo một thứ tự cụ thể và hệ thống đang diễn giải dữ liệu này theo một cách cụ thể.

3

Đó chỉ là số. Họ không có gì để làm với nhị phân mỗi se. Tuy nhiên, bạn có thể viết chúng ra dưới dạng nhị phân, nếu bạn chọn - ví dụ: 75 = 01001011 trong cơ sở 2.

byte đây là loại dữ liệu có thể chứa một trong 256 giá trị có thể. Thông thường, điều này được hiểu là một số từ 0 đến 255 hoặc 8 số nhị phân (tức là 8 giá trị ON/OFF). Đây chỉ là hai cách nhìn vào cùng một thứ.

0

Mỗi số trong mảng nhỏ hơn 256. Chúng được chuyển đổi thành byte theo dạng nhị phân. Đây chỉ là biểu diễn thập phân của chúng.

3

Tuyên bố đó khai báo một mảng byte và gán cho nó 4 phần tử - mỗi phần tử là một byte đơn (theo lý thuyết!) Về kích thước. Các giá trị thực tế - 85, 86, 67, 75 - được lưu trữ trong mảng đó là mỗi giá trị có thể vừa với một byte đơn. Trong mẫu mã của bạn, các giá trị đó được biểu diễn dưới dạng thập phân. Khi mã của bạn được dịch sang dạng thực thi, các giá trị đó cuối cùng sẽ được máy tính của bạn nhìn thấy trong biểu diễn nhị phân của chúng, được sắp xếp từ đăng ký để đăng ký, đẩy, xuất hiện và tích lũy, v.v.

Bạn có thể đại diện cho các giá trị trong các cơ sở khác bên trong mã nguồn của bạn - hexadecimal, hoặc base 16, gần với kim loại hơn thập phân, và tương ứng cho phép quá trình suy nghĩ của bạn di chuyển dễ dàng giữa biểu diễn con người và mã của bạn thực sự nói vì hầu như không có toán học thực tế tinh thần đi giữa hex và nhị phân; một ví dụ khác là bát phân.

Hoặc bạn có thể nghĩ theo cách này: thể hiện các giá trị trong mã của bạn bằng cách sử dụng cơ sở liên quan tốt nhất đến những gì bạn đang làm. Nếu bạn đang OR cùng với các quyền hoặc giá trị màu, hex hoặc bát phân; nếu bạn tính lãi trên tài khoản séc, thì lựa chọn hiển nhiên là số thập phân. Bây giờ, đối với đoạn mã cụ thể của bạn - nếu bạn đang xử lý các ký tự riêng lẻ hoặc viết nội dung thô vào một thiết bị khối, một mảng byte có thể là tốt - tuy nhiên, khi bạn trở thành một với trình biên dịch, bộ não của bạn cuối cùng có thể xem xét hex đại diện dễ xử lý hơn.

+0

... và tôi luôn thấy mọi thứ sau sự kiện mà tôi muốn đề cập trước những người khác, nhưng tôi lại bị mất: ép cho hiệu quả lưu trữ là một lý do khác bạn có thể sử dụng loại byte thay cho loại int. – Christopher

+0

Làm cách nào bạn nắm bắt được điều này? Trực tuyến hoặc ở trường? –

+1

Chắc chắn không phải là trường học - tôi đã gần như lảng tránh khỏi trường trung học, và không đi xa hơn nữa. Không trực tuyến; sách, thử nghiệm, gõ cứng, và nhiều đêm chỉ cho tôi, trình biên dịch của tôi, và số lượng phong phú của cà phê nóng đường ống. Tìm cho mình một thực tế - và nhấn! - cần phải lập trình một cái gì đó, bất cứ điều gì. Nếu nhu cầu là hoàn toàn nghiêm trọng, và thời hạn là điều đầu tiên vào buổi sáng, bạn có thể nhận được khá tốt thực sự nhanh chóng. :) – Christopher

4

85 chỉ đơn giản là một số thập phân (tức là "cơ sở 10") positional notation của một số. Nó có nghĩa là:

8 *^1 + 5 *^0

= 8 * 10 + 5 * 1

= 80 + 5

= 85

Tuy nhiên, bạn có thể chọn bất kỳ cơ sở nào để biểu thị số. Con người của chúng tôi có 10 ngón tay là nguồn gốc có thể xảy ra của hệ thống "cơ sở 10" trong sử dụng hàng ngày, nhưng không có cách nào để thể hiện 10 chữ số khác nhau trong mạch vật lý của máy tính. Mạch này chỉ hiểu thiếu electron so với sự hiện diện của các electron - tức là chỉ có hai chữ số, do đó hệ nhị phân.

Vì vậy, trong khi bạn có thể viết số thập phân 85 trong mã nguồn của chương trình của bạn (để giữ cho nó tự nhiên hơn với con người), cuối cùng nó được thể hiện trong máy tính như nhị phân 1.010.101, bằng với ...

1 *^6 + 0 *^5 + 1 *^4 + 0 *^3 + 1 *^2 + 0 *^1 + 1 *^0

= 1 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1

= 64 + 16 + 4 + 1

= 85


BTW, hệ thống thập phân không "align" với nhị phân - một chữ số thập phân duy nhất không thể được đại diện bởi một số "toàn bộ" của các chữ số nhị phân và số thập phân tròn không phù hợp cũng những con số nhị phân tròn. Ví dụ:

  • 10 (thập phân) = 1010 (nhị phân)
  • 100 (thập phân) = 1.100.100 (nhị phân)
  • 1000 (thập phân) = 1111101000 (nhị phân)
  • vv ...

Đôi khi, nó là thuận tiện để sử dụng một hệ thống số mà "align" với nhị phân, chẳng hạn như octal (một chữ số bát phân là chính xác 3 nhị phân chữ số) hoặc hexadecimal (một chữ số thập lục phân là chính xác 4 chữ số nhị phân).

Điểm quan trọng là tất cả các hệ thống này cuối cùng được biểu diễn dưới dạng nhị phân trong máy tính.

Trên một mặt-lưu ý: "hexa-thập phân" từng là "SEXA -decimal", nhưng dường như bị xúc phạm một số nhạy cảm khăt khe;)

Các vấn đề liên quan