سؤال

endianness يهم على الإطلاق مع عمليات أحادي المعامل؟ إما منطقية أو التحول؟

وأنا أعمل على الواجبات المنزلية فيما يتعلق المختصة بالبت المشغلين، وأنا لا يمكن أن تجعل رؤوس أو ذيول على ذلك، واعتقد انني اتلقى معلقة تماما حتى على endianess. وهذا هو، أنا باستخدام آلة endian قليلا (مثل معظمها)، ولكن هل هذا ضرورة اعتبار أو أنها ليست حقيقة يضيع؟

في حالة لا يهم، أنا باستخدام C.

هل كانت مفيدة؟

المحلول

وEndianness الأمور فقط لتخطيط البيانات في الذاكرة. حالما يتم تحميل البيانات من قبل المعالج ليتم تشغيلها على، endianness هو غير ذي صلة تماما. التحولات والعمليات المختصة بالبت، وهلم جرا أداء كما تتوقعون (بيانات ضعت منطقيا من حيث بت الترتيب المنخفض إلى الأعلى) بغض النظر عن endianness.

نصائح أخرى

ومشغلي المختصة بالبت مجردة بعيدا endianness. على سبيل المثال، المشغل >> دائما يحول بت نحو الرقم الأقل أهمية. ومع ذلك، هذا لا يعني أنك آمن تجاهل تماما endianness عند استخدامها، على سبيل المثال عند التعامل مع البايتات الفردية في بنية أكبر لا يمكنك تحمل دائما أنها سوف تقع في نفس المكان.

short temp = 0x1234;
temp = temp >> 8;

// on little endian, c will be 0x12, on big endian, it will be 0x0
char c=((char*)&temp)[0];

لتوضيح، وأنا لست في خلاف أساسي مع الأجوبة الأخرى هنا. والنقطة التي أحاول أن يجعل هو التأكيد على أنه بالرغم من أن مشغلي المختصة بالبت هي endian أساسا محايدة، لا يمكن تجاهل تأثير endianess في التعليمات البرمجية، وخصوصا عندما يقترن مع مشغلين آخرين.

وكما ذكر آخرون، تعرف تحولات بواسطة مواصفات لغة C ومستقلة عن endianness، ولكن تنفيذ التحول الصحيح قد تختلف اعتمادا على المنتدى العمارة يستخدم المرء تكملة أو اثنين في الحساب مكمل.

وهذا يعتمد. دون الادلاء عدد إلى نوع جديد، يمكنك علاج endianness بشفافية.

ومع ذلك، إذا تتضمن العملية الخاصة بك نوع الصب الجديد، ثم توخي الحذر بك.

وعلى سبيل المثال، إذا كنت تريد تحويل حق بعض اجزاء والزهر (صراحة أو لا) لنوع جديد، والمسائل endianness!

لاختبار endianness الخاص بك، يمكنك ببساطة يلقي int إلى char:

int i = 1;

char *ptr;

...

ptr = (char *) &i;  //Cast it here

return  (*ptr);

وأنت لم تحدد لغة ولكن عادة، لغات البرمجة مثل C endianness مجردة بعيدا في عمليات أحادي المعامل. لذلك لا، لا يهم في أحادي المعامل العمليات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top