2013-05-28 25 views
14

tôi đang đọc "Học Core Audio: Một Hands-On Guide to Audio Lập trình cho Mac và iOS" Chris Adamson và tại một thời điểm nào đó, tác giả mô tả lớn về cuối nhỏ như:Có thể endianness tham chiếu đến thứ tự bit trong một byte không?

các bit cao của một byte hoặc từ là số đáng kể hơn so với các byte thấp hơn.

Tuy nhiên, cho đến bây giờ, mặc dù vấn đề về người lớn cuối cùng chỉ áp dụng cho byte đặt hàng và không phải thứ tự bit. Một byte có cùng thứ tự bit (từ trái sang phải) bất kể chúng ta đang nói về các hệ thống cuối nhỏ hoặc lớn. Liệu tôi có sai? Tác giả có sai không? Hay tôi đã hiểu nhầm quan điểm của anh ta?

Trả lời

12

Vì bạn thường không thể giải quyết các bit trong một byte riêng lẻ, không có khái niệm về "bit endianness" nói chung.

+2

Nhưng, khi bạn thực hiện các thao tác bitwise như dịch chuyển, bạn có "địa chỉ" chúng không? – Meda

+3

Khi dịch chuyển, bạn vẫn xử lý các bit như một phần của một đơn vị lớn hơn (byte, int hoặc cái gì đó). Endianess chỉ có vấn đề khi bạn có thể trực tiếp giải quyết một đối tượng lớn hơn byte-by-byte - bạn cần phải biết làm thế nào những byte địa chỉ riêng lẻ được sắp xếp trong đối tượng lớn hơn. –

+3

@Meda khi bạn đang xuống đến mức bit chuyển một byte duy nhất đó là "đại diện" (số tương ứng với) có thể phá vỡ và nó chỉ là một bộ sưu tập tùy ý của 1 và 0. Các hướng dẫn được chuyển qua để xoay (ROL, ROR, RCL, RCR) hoặc dịch chuyển (SHL, SHR ...) theo một "hướng" nhất định cũng trừu tượng như các số. –

7

Ý nghĩa duy nhất trong đó có một thứ như "thứ tự bit" là thứ tự bit được gán cho bitfields. Ví dụ, trong:

union { 
    struct { 
     unsigned char a:4; 
     unsigned char b:4; 
    } bf; 
    unsigned char c; 
}; 

tùy thuộc vào việc thực hiện, các đại diện của bf.a thể chiếm bốn bit cao của c, hoặc bốn bit thấp của c. Việc sắp xếp thứ tự các thành viên bitfield có khớp với thứ tự byte được định nghĩa thực hiện hay không.

6

"endianness" của byte theo thứ tự bit không thực sự là mối quan tâm trừ khi bạn đang làm việc với một hệ thống kỳ lạ cho phép bạn xử lý các bit riêng biệt. Nó có thể là một mối quan tâm khi quyết định cách truyền dữ liệu qua dây, nhưng quyết định này thường được thực hiện ở cấp phần cứng.

âm thanh

Về mặt liên quan đến audio streaming, nó rất có thể là quan trọng. Phần cứng chịu trách nhiệm chuyển đổi dòng âm thanh kỹ thuật số thành tín hiệu âm thanh tương tự có thể mong đợi các bit trong luồng sẽ theo một thứ tự cụ thể. Nếu họ sai, âm thanh có thể phát ra hoàn toàn. Có lẽ tác giả của cuốn sách của bạn đã giải thích về điều này? Dù sao, như tôi đã đề cập trước đó, điều này thường được quyết định ở cấp độ phần cứng và không thực sự là một mối quan tâm khi lập trình ở người dùng hoặc thậm chí là cấp hạt nhân. Nói chung, các tiêu chuẩn ngành sẽ xác định cách hai phần cứng sẽ truyền dữ liệu cho nhau. Miễn là tất cả các phần cứng của bạn đồng ý về độ bền bit, thì mọi thứ đều ổn.

Further reading at Wikipedia.

+0

+1 để đề cập đến thứ tự truyền nối tiếp. Điều này không liên quan trực tiếp đến ngôn ngữ C, nhưng tất nhiên là có liên quan đến nhiều công dụng của C. –

2

Trình tự của các bit bên trong một Byte không có ý nghĩa, bit bên trong một byte không địa chỉ, do đó bạn không thể xác định một trật tự của các bit này để sử dụng nó như là một tài liệu tham khảo cho một định nghĩa của endianness . Không giống như bit, byte là địa chỉ, do đó, có một thứ tự địa chỉ mà chúng ta có thể sử dụng như một tham chiếu để xác định những gì có ý nghĩa nhỏ hoặc lớn về cuối.

Bạn có thể có ấn tượng rằng Left shift << hoặc Right Shift >> toán tử bit-khôn ngoan ngụ ý gián tiếp rằng có một thứ tự xác định bit bên trong một byte, nhưng điều đó không đúng. Hai thuật ngữ này dựa trên một biểu diễn byte trừu tượng có bit thấp nhất nằm ở bên phải và bit có giá trị cao hơn khi đi sang trái, nhưng theo định nghĩa Left shift có cùng tác dụng như phép nhân với 2 và Right shift có cùng tác dụng như phân chia 2 (cho số nguyên không dấu).

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