Có mẹo thực tế nào để ghi nhớ sự khác biệt giữa big endian và little endian không?


13

Tôi không làm việc mỗi ngày với các vấn đề lớn về cuối và cuối cùng và do đó tôi rất khó nhớ cái nào là cái gì.

Gần đây tôi có một cuộc phỏng vấn hỏi sự khác biệt giữa hai người; vì tôi không nhớ nên tôi đã quyết định "đoán" (50% cơ hội, sau tất cả) nhưng tôi đã thất bại.

Vì vậy, có bất kỳ thủ thuật pratical rộng rãi được biết đến để nhớ sự khác biệt giữa endian lớn và endian nhỏ là gì?


10
Tôi gầy, tốt hơn hết là nói rõ endianess là gì và nói rằng bạn không bao giờ có thể nhớ nó đi theo hướng nào để bạn luôn google nó
jk.

Tôi cũng có vấn đề nhớ nó và có quá nhiều thủ thuật kỹ thuật khó hiểu. Sự giúp đỡ đáng tin cậy duy nhất của tôi là bỏ bùa chú endianness trên google để tôi có được bài viết trên Wikipedia .
mouviciel

3
Sự trùng hợp hài hước - Tôi chỉ tình cờ thấy liên kết này ngày hôm nay, và thật đáng ngạc nhiên là Commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@Nevermind Tôi đã ngừng đọc bài viết đó sau đoạn thứ hai. "Chỉ quan tâm đến các nhà văn biên dịch và những người phải đối phó với bộ nhớ được ánh xạ tới các thanh ghi"? Bên cạnh thực tế đó là một câu đường dẫn vườn tuyệt vời , nó ngụ ý rằng mã liên quan đến các thanh ghi là một trường hợp cạnh. Hãy thử sử dụng máy tính đôi khi không có trình điều khiển thiết bị.
dodgethesteamler

Câu trả lời:


14

Tôi đã luôn nghĩ rằng nó đã định nghĩa sai, và đó cũng là mẹo để ghi nhớ nó. Là một người nói tiếng Anh không phải là người bản ngữ, tôi thấy "kết thúc" là đối lập với "bắt đầu" (mặc dù rõ ràng "kết thúc" có thể có nghĩa là kết thúc - kết thúc bắt đầu hoặc kết thúc). Dù sao, tôi chỉ nhớ rằng "nó đã định nghĩa sai" :)

  • Trong endian lớn , byte đáng kể nhất (lớn nhất) là vào lúc bắt đầu .
  • Trong ít endian , byte nhỏ nhất (nhỏ nhất) là bắt đầu .

Hoặc, đề cập đến bit endianness :

  • 128 64 32 16 8 4 2 1 là endian lớn, bởi vì nó kết thúc với ít.
  • 1 2 4 8 16 32 64 128 là endian nhỏ, vì nó kết thúc lớn.

Mặc dù cách sử dụng thông thường của từ endianness đề cập đến cách các byte được sắp xếp trong một từ, nghĩa chung của nó chỉ việc sắp xếp các thành phần phụ có thể định địa chỉ riêng lẻ trong biểu diễn của một mục dữ liệu lớn hơn ( như được giải thích trong Wikipedia ).


5
ahh, nhưng những người lilliputian nhỏ bé đã bắt đầu (bẻ khóa) trứng của họ ở đầu nhỏ để nó đi đúng đường
jk.

4
-1: Endian-ness dùng để chỉ các byte trong một từ, không phải các bit trong một byte.
kdgregory

1
@kdgregory - Cuối cùng, việc đánh số bit bị ảnh hưởng trong một từ. Bạn đã thử các cấu trúc trường bit qua các endian khác nhau chưa? Tôi đồng ý rằng câu trả lời có sai, mặc dù.
mouviciel

@Kdgregory: Theo Wikipedia , endianness đề cập đến thứ tự của các thành phần phụ có thể định địa chỉ riêng lẻ trong việc thể hiện một mục dữ liệu lớn hơn. Đó là trường hợp chung. Ngoài ra còn có một khái niệm về bit endian . Bạn nói đúng rằng việc sử dụng phổ biến nhất là tính thời sự liên quan đến cách các byte được sắp xếp trong một từ và các ví dụ của tôi thừa nhận không phản ánh điều đó. Thay thế ví dụ đầu tiên với trường hợp phổ biến.
Joonas Pulakka

2
@kdgregory: Từ khi nào cần có sự tồn tại của phần cứng để biện minh cho các khái niệm lý thuyết CS? Nhưng rất tốt: 8051 có các thanh ghi địa chỉ bit. Ngôn ngữ Ada cho phép chỉ định thứ tự bit thích hợp cho biểu diễn kiểu dữ liệu ( pdf ). Thứ tự truyền các bit trên một phương tiện nối tiếp tất nhiên cần xác định độ bền bit. Thực tế là việc sử dụng "endianness" thông thường đề cập đến một trường hợp đặc biệt (byte bằng từ) không làm mất hiệu lực nghĩa chung của nó.
Joonas Pulakka

33

Mẹo riêng của tôi:

  • endian lớn = đầu cuối lớn! (byte đầu tiên (địa chỉ thấp nhất) là MSB)
  • little endian = little-end trước! (byte đầu tiên (địa chỉ thấp nhất) là LSB)

3
Vâng, đây là cách tôi nghĩ về nó: Big Endian "Bắt đầu ở cuối LỚN", trong khi Little Endian "Bắt đầu ở đầu nhỏ". Nó giống như một cây gậy bóng chày, có hai đầu của con dơi, một cái to, cái kia thì nhỏ. Đó thực sự không phải là một khái niệm khó.
Shane Kilkelly

6

Cách tốt nhất để ghi nhớ điều này là các dân tộc văn minh tìm kiếm sự đa dạng và do đó ăn trứng của họ khác với cách họ đặt số. Trong khi chúng ta viết các chữ số thập phân bắt đầu từ các chữ số lớn đầu tiên (endian lớn), chúng ta ăn trứng luộc mềm từ đầu nhỏ (endian nhỏ).


1
Câu trả lời này chủ yếu là phi kỹ thuật, nhưng nó hoàn toàn chính xác và khiến tôi bật cười. Làm tốt lắm.

6

Số lượng lớn bắt đầu ở "kết thúc lớn". Số ít endian bắt đầu ở "đầu nhỏ".

Cả hai đều ám chỉ đến vấn đề bắt đầu ăn trứng của bạn ở đâu, theo Gulliver's Travels.

Trong trường hợp này, "kết thúc" không đối lập với bắt đầu, nó chỉ có nghĩa là bất kỳ cực trị nào của (chuỗi | chuỗi | số | chuỗi), do đó chúng không được gọi là "kết thúc lớn" hoặc "kết thúc nhỏ" (chắc chắn sẽ là ngược lại với "bắt đầu").


Thật. Và cách dễ nhớ nhất (và thú vị nhất) là đi và đọc Gulliver's Travels. Tôi đảm bảo bạn sẽ không bao giờ quên cái nào nữa!
Jules

Bạn nên đặt "bắt đầu ăn" in đậm (cũng 72pt, <nháy>), đó thực sự là toàn bộ lý do cho tất cả sự nhầm lẫn ở đây.
T Nierath

2

Cách dễ nhất để tôi nhớ là đổi từ từ end endian thành thành start startian. Các số nguyên startian lớn bắt đầu bằng đầu lớn (ví dụ: hầu hết các byte quan trọng đến trước) và các số nguyên startian nhỏ bắt đầu bằng đầu nhỏ (ví dụ: các byte quan trọng nhất đến trước).


Vui lòng phát âm startian là /'stɑːr.ʃən/ hoặc /'stɑːr.ti.ən/ (bỏ qua / r / cho các dấu không rhotic)
dreamlax

Điều này là khá thông minh, và dễ nhớ.
Coldblackice

1

Tôi không bao giờ có thể nhớ đó là "big endian" và "little endian" nhưng biết được độ bền của bộ xử lý PowerPC và Intel x86. Little có hầu hết các chữ cái chung với Intel, vì vậy Intel x86 là ít chữ cuối.

Tất nhiên điều đó chỉ hữu ích nếu bạn biết thứ tự byte của PPC và x86. Mặt khác, bây giờ bạn nên nhớ rằng Intel x86 = little endian. Và hãy nhớ rằng x86 và ARM rất, rất tương thích ngay cả với các bộ hướng dẫn hoàn toàn khác nhau.


1

Tôi muốn nói theo cách này: Lớn thật đẹp!

Lớn == đẹp == đúng.
Endianess bên phải là cái mà bạn có thể đọc trong hexdump, đây là cái đặt byte đầu tiên quan trọng nhất, giống như bất kỳ con người lành mạnh nào.

Ít == xấu xí == sai.
Các hexdumps được tạo ra bởi endianess này hoàn toàn sai đến nỗi bạn chạy đi la hét "Não bộ!". Có lẽ đây là một loại ghê tởm của người ngoài hành tinh, chúng ta chỉ có thể suy đoán về nguồn gốc của sự tàn bạo này. Tuy nhiên, nó tồn tại, và chúng ta bị mắc kẹt với nó.

Thật đáng tiếc, nó không phải luôn luôn là biến thể tốt nhất làm cho cuộc đua ...


Little == ugly == wrong... "Ngay cả người nhỏ nhất cũng có thể thay đổi tiến trình của tương lai" -Galadrial, LOTR
Coldblackice

-1

Trong endian lớn: (Thứ tự tăng dần)

Thấp đến cao tức là

0 | 1 | 2 | 3 ^ ^ Bắt đầu kết thúc

Trong little-Endian: (Thứ tự giảm dần)

Cao đến thấp

I E

3 | 2 | 1 | 0 ^ ^ Bắt đầu kết thúc


1
Câu hỏi yêu cầu một mẹo thực tế để nhớ cái nào.
gnasher729
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.