2010-10-26 31 views
13

Từ khóa byte biểu thị tích phân loại lưu trữ giá trị như được chỉ ra trong bảng sau. Đó là một số nguyên 8 bit Unsigned.Nếu byte là số nguyên 8 bit thì làm thế nào chúng ta có thể đặt nó là 255?

Nếu chỉ 8 bit thì chúng ta có thể gán nó bằng 255 như thế nào?

byte myByte = 255; 

Tôi nghĩ 8 bit giống như một ký tự?

+1

Trong .net, 1 ký tự là 16 bit (UTF-16) –

+13

Bạn nhận ra rằng chuỗi "255" và số 255 là hai thứ khác nhau, phải không? –

+3

@Marc Gravell - Tôi vẫn cảm thấy vui vẻ về mặt ngữ nghĩa rằng một nhân vật duy nhất tương đương với một từ. –

Trả lời

19

Các ký tự được mô tả (theo nghĩa cơ bản) bằng một biểu diễn dạng số phù hợp với cấu trúc 8 bit. Nếu bạn nhìn vào ASCII Codes đối với các ký tự ascii, bạn sẽ thấy chúng liên quan đến các số.

Số nguyên một chuỗi bit có thể biểu diễn được tạo bởi công thức 2^n - 1 (như được mô tả một phần ở trên bởi @Marc Gravell). Vì vậy, một cấu trúc 8 bit có thể chứa 256 giá trị bao gồm 0 (cũng lưu ý số TCPIP là 4 chuỗi riêng biệt của cấu trúc 8 bit). Nếu đây là một số nguyên đã ký, bit đầu tiên sẽ là một cờ cho dấu và 7 còn lại sẽ chỉ ra giá trị, vì vậy trong khi nó vẫn giữ 256 giá trị, nhưng tối đa và tối thiểu sẽ được xác định bởi 7 bit dấu (2^7 - 1 = 127).

Khi bạn nhập các ký tự Unicode và ký tự "ascii" cao, mã hóa yêu cầu nhiều hơn cấu trúc 8 bit. Vì vậy, trong ví dụ của bạn, nếu bạn chỉ định một giá trị byte là 76, một bảng tra cứu có thể được tham khảo để lấy được ký tự ascii v.

11

11111111 (8 trên bit) 255: 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1

Có lẽ bạn đang nhầm lẫn điều này với 256, đó là 2^8?

25

Có 256 cấu hình khác nhau của các bit trong một byte

0000 0000 
0000 0001 
0000 0010 
... 
1111 1111 

Vì vậy, có thể gán một byte một giá trị trong khoảng 0-255

9

8 bit (unsigned) là 0-255, hoặc (2^8) -1.

âm thanh giống như bạn đang gây nhầm lẫn số nguyên so với văn bản biểu diễn dữ liệu.

4

loạt các giá trị cho unsigned 8 bit là từ 0 đến 255. vì vậy đây là hoàn toàn hợp lệ

8 bit là không giống như một nhân vật trong C#. Trong ký tự C# là 16 bit. Và ngay cả khi nhân vật là 8 bit nó không có liên quan đến câu hỏi chính

5

255 = 2^8 - 1 = FF [hex] = 11111111 [bin]

+0

Typo: phải là 'FF [hex]' – Ishtar

+0

tất nhiên - cố định – UGEEN

2

Tôi nghĩ bạn đang nhầm lẫn mã hóa ký tự với giá trị tích phân thực tế được lưu trữ trong biến.

Một giá trị 8-bit có thể có 255 cấu hình như đã trả lời bởi Arkain
Tùy chọn, trong ASCII, mỗi người trong số những cấu hình đại diện cho một ký tự ASCII khác nhau
Vì vậy, về cơ bản nó phụ thuộc vào cách bạn giải thích giá trị, như một giá trị số nguyên hoặc như một nhân vật

ASCII Table
Wikipedia on ASCII

5

tôi nghĩ 8 bit là điều tương tự như chỉ là một nhân vật?

Tôi nghĩ bạn đang nhầm lẫn số 255 bằng chuỗi "255."

Hãy suy nghĩ về nó theo cách này: nếu máy tính lưu trữ số nội bộ sử dụng ký tự, làm thế nào nó sẽ lưu trữ những ký tự ? Sử dụng bit, phải không?

Vì vậy, trong kịch bản giả thiết này, một máy tính sẽ sử dụng các bit để biểu diễn các ký tự mà sau đó nó được sử dụng để biểu diễn các số.Ngoài việc là khủng khiếp từ một quan điểm hiệu quả, điều này chỉ là dư thừa. Các bit có thể biểu diễn trực tiếp các số.

+0

Vâng, COBOL thực hiện điều đó. Và nhiều cơ sở dữ liệu xác định số của chúng theo độ dài thập phân. Các vị thần biết tại sao ... – Nyerguds

0

Chắc chắn, một chút muộn để trả lời, nhưng đối với những người có được điều này trong một tìm kiếm google, ở đây chúng tôi đi ...

Giống như những người khác đã nói, một nhân vật chắc chắn là khác nhau để một số nguyên. Cho dù đó là 8 bit hay không là không liên quan, nhưng tôi có thể giúp đỡ bằng cách chỉ ra cách mỗi người hoạt động:

cho số nguyên 8 bit, phạm vi giá trị từ 0 đến 255 là có thể (hoặc -127..127 nếu nó được ký, và trong trường hợp này, bit đầu tiên quyết định phân cực)

cho ký tự 8 bit, rất có thể là ký tự ASCII, thường được tham chiếu bởi chỉ mục được chỉ định bằng giá trị thập lục phân, ví dụ FF hoặc 0A. Bởi vì các máy tính trong ngày chỉ có 8 bit, kết quả là một bảng 16x16, tức là 256 ký tự có thể có trong bộ ký tự ASCII.

Dù bằng cách nào, nếu byte dài 8 bit, thì cả hai địa chỉ ASCII hoặc số nguyên 8 bit sẽ phù hợp với dữ liệu của biến. Tôi khuyên bạn nên sử dụng một kiểu dữ liệu chuyên dụng khác, mặc dù đơn giản. (ví dụ: char cho ASCII hoặc dữ liệu thô, int cho các số nguyên của bất kỳ độ dài bit nào, thường là 32-bit)

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