Con trăn lớn hay nhỏ endian?

Little and Big Endian Mystery

Cải thiện bài viết

Lưu bài viết

Thích bài viết

  • Độ khó. Dễ dàng
  • Cập nhật lần cuối. 12 tháng 6 năm 2022

  • Đọc
  • Thảo luận[50+]
  • khóa học
  • Luyện tập
  • Băng hình
  • Cải thiện bài viết

    Lưu bài viết

     

    Cái gì đây?
    Little và big endian là hai cách lưu trữ kiểu dữ liệu nhiều byte [ int, float, v.v.]. Trong các máy endian nhỏ, byte cuối cùng của biểu diễn nhị phân của kiểu dữ liệu nhiều byte được lưu trữ trước. Mặt khác, trong các máy big endian, byte đầu tiên của biểu diễn nhị phân của kiểu dữ liệu nhiều byte được lưu trữ trước tiên.  
    Giả sử số nguyên được lưu dưới dạng 4 byte [Đối với những người đang sử dụng trình biên dịch dựa trên DOS như C++ 3. 0, số nguyên là 2 byte] thì biến x có giá trị 0x01234567 sẽ được lưu trữ như sau
     

     

     

    Làm cách nào để xem biểu diễn bộ nhớ của các loại dữ liệu nhiều byte trên máy của bạn?
    Đây là mã C mẫu hiển thị biểu diễn byte của int, float và con trỏ.  
     

    c




    #include

     

    /* function to show bytes in memory, from location start to start+n*/

    void show_mem_rep[char *start,int n]

    {

    #include 0int #include 2

    #include 0#include 4 #include 5

    #include 6#include 7#include 8#include 9_______2_______0

    #include 0#include 7#include 8/* function to show bytes in memory, from location start to start+n*/4/* function to show bytes in memory, from location start to start+n*/5

    /* function to show bytes in memory, from location start to start+n*/6

     

    /* function to show bytes in memory, from location start to start+n*/7

    int /* function to show bytes in memory, from location start to start+n*/9

    {

    void1_______7_______ void3

    void1_______3_______5_______5_______ void7void8void9

    void1_______4_______1show_mem_rep[2

    void1_______4_______4 show_mem_rep[5

    /* function to show bytes in memory, from location start to start+n*/6

    Thời gian phức tạp. Ô[1]

    Không gian phụ trợ. Ô[1]

    Khi chương trình trên được chạy trên máy endian nhỏ, cho đầu ra “67 45 23 01”, trong khi nếu chương trình chạy trên máy endian lớn, cho đầu ra “01 23 45 67”
    Có cách nào nhanh chóng để xác định độ bền của máy của bạn không?
    không có. các cách để xác định tuổi thọ của máy của bạn. Đây là một cách nhanh chóng để làm như vậy.  
     

    C++




    show_mem_rep[7

    show_mem_rep[8 show_mem_rep[9 char0

    int /* function to show bytes in memory, from location start to start+n*/9

    {

    #include 0char5int char7

    #include 0char *start,0char*start,2

    #include 0*start,4 *start,5

    *start,6*start,7*start,8*start,9

    #include 0int1

    *start,6*start,7int4*start,9

    #include 0show_mem_rep[4 show_mem_rep[5

    /* function to show bytes in memory, from location start to start+n*/6

     

    n]0

    C




    #include

    int /* function to show bytes in memory, from location start to start+n*/9

    {

    void1_______5_______5int char7

    void1_______5_______ *start,0char*start,2

    void1_______6_______4 {6

    {7#include 7_______1_______8*start,8_______2_______5

    void1int1

    {7#include 7_______1_______8int4_______2_______5

    void1_______4_______1show_mem_rep[2

    void1_______4_______4 show_mem_rep[5

    /* function to show bytes in memory, from location start to start+n*/6

    đầu ra.  
     

    Little endian

    Thời gian phức tạp. Ô[1]

    Không gian phụ trợ. Ô[1]

    Trong chương trình trên, một con trỏ ký tự c đang trỏ đến một số nguyên i. Vì kích thước của ký tự là 1 byte khi con trỏ ký tự không được tham chiếu nên nó sẽ chỉ chứa byte đầu tiên của số nguyên. Nếu máy là little endian thì *c sẽ là 1 [vì byte cuối cùng được lưu trước] và nếu máy là big endian thì *c sẽ là 0.  
    Độ bền có quan trọng đối với các lập trình viên không?
    Hầu hết các lần trình biên dịch quan tâm đến tuổi thọ, tuy nhiên, tuổi thọ trở thành một vấn đề trong các trường hợp sau
    Nó quan trọng trong lập trình mạng. Giả sử bạn viết các số nguyên vào tệp trên máy endian nhỏ và bạn chuyển tệp này sang máy endian lớn. Trừ khi có ít biến đổi endian thành big endian, máy big endian sẽ đọc tệp theo thứ tự ngược lại. Bạn có thể tìm thấy một ví dụ thực tế như vậy tại đây
    Thứ tự byte tiêu chuẩn cho mạng là big endian, còn được gọi là thứ tự byte mạng. Trước khi truyền dữ liệu trên mạng, trước tiên dữ liệu được chuyển đổi thành thứ tự byte mạng [big endian].  
    Đôi khi nó quan trọng khi bạn đang sử dụng kiểu truyền, chương trình dưới đây là một ví dụ
     

    c




    #include

    int /* function to show bytes in memory, from location start to start+n*/9

    {

    #include 0char5_______5_______ #include 23

    #include 0char5_______1_______26 int #include 28#include 26 int #include 31

    #include 0#include 7#include 8#include 35#include 36

    #include 0show_mem_rep[1show_mem_rep[2

    #include 0show_mem_rep[4 show_mem_rep[5

    /* function to show bytes in memory, from location start to start+n*/6

    Thời gian phức tạp. Ô[1]

    Không gian phụ trợ. Ô[1]

    Trong chương trình trên, một mảng char được đánh kiểu thành một kiểu số nguyên ngắn không dấu. Khi tôi chạy chương trình trên trên máy endian nhỏ, tôi nhận được đầu ra là 1, trong khi nếu tôi chạy nó trên máy endian lớn, tôi nhận được 256. Để làm cho chương trình trở nên độc lập về tuổi thọ, nên tránh phong cách lập trình trên.  
    bi-endian là gì?
    Bộ xử lý hai đầu có thể chạy ở cả hai chế độ cuối nhỏ và lớn
    Các ví dụ về máy mini, big endian và bi-endian là gì?
    Bộ xử lý dựa trên Intel là những người cuối cùng nhỏ bé. Bộ xử lý ARM là những người cuối cùng nhỏ bé. Bộ vi xử lý ARM thế hệ hiện tại là bi-endian
    Bộ xử lý Motorola 68K là những người cuối cùng lớn. Bộ xử lý PowerPC [của Motorola] và SPARK [của Sun] là những bộ xử lý lớn. Phiên bản hiện tại của các bộ xử lý này là hai đầu cuối.  
    Độ bền có ảnh hưởng đến định dạng tệp không?
    Các định dạng tệp có 1 byte làm đơn vị cơ bản không phụ thuộc vào độ bền e. g. , tệp ASCII. Các định dạng tệp khác sử dụng một số định dạng tuổi thọ cố định e. g, Các tệp JPEG được lưu trữ ở định dạng big endian.  
    Cái nào tốt hơn - endian nhỏ hay endian lớn?
    Thuật ngữ endian nhỏ và lớn xuất phát từ Gulliver's Travels của Jonathan Swift. Hai nhóm không thống nhất được nên mở quả trứng ở đầu nào -a- nhỏ hay lớn. Cũng giống như vấn đề trứng, không có lý do công nghệ nào để chọn quy ước đặt hàng một byte thay vì quy ước khác, do đó các cuộc tranh luận biến thành tranh cãi về các vấn đề chính trị xã hội. Miễn là một trong các quy ước được chọn và tuân thủ một cách nhất quán, thì sự lựa chọn là tùy ý
     

    Khuyến khích

    Giải các bài toán DSA trên GfG Practice

    Giải quyết vấn đề


    Ghi chú cá nhân của tôi arrow_drop_up

    Tiết kiệm

    Vui lòng Đăng nhập để nhận xét.

    Python có sử dụng lớn không

    biểu thị thứ tự byte mạng luôn là big-endian như được định nghĩa trong IETF RFC 1700.

    Java là endian lớn hay nhỏ?

    Trong Java, dữ liệu được lưu trữ ở định dạng big-endian [còn gọi là thứ tự mạng]. Nghĩa là, tất cả dữ liệu được biểu diễn tuần tự bắt đầu từ bit quan trọng nhất đến ít quan trọng nhất.

    Hầu hết các bộ xử lý lớn hay nhỏ endian?

    Cho đến nay, thứ tự phổ biến nhất của nhiều byte trong một số là Little-endian , được sử dụng trên tất cả các bộ xử lý Intel.

    Thứ tự byte trong Python là gì?

    Đối số thứ tự byte xác định thứ tự byte được sử dụng để biểu thị số nguyên và mặc định là "lớn". Nếu byteorder là "big" , thì byte quan trọng nhất nằm ở đầu mảng byte. Nếu thứ tự byte là "nhỏ", thì byte quan trọng nhất nằm ở cuối mảng byte.

    Chủ Đề