أحادي المعامل غير مشغل (~ في C) فيما يتعلق Endian طفيف وendian كبيرة

StackOverflow https://stackoverflow.com/questions/1036141

  •  10-07-2019
  •  | 
  •  

سؤال

وهذا هو فيما يتعلق ديرنج ولكن ليس هذا هو ديرنج.

وأواجه صعوبة في فهم ما إذا كان هناك اختلاف على كيفية المختصة بالبت لا (~ في C) من شأنه أن يؤثر signed int وunsigned int عندما جمعت على جهاز endian كبيرة مقابل آلة endian قليلا.

هل بايت <م> حقا "إلى الوراء"، وإذا كان الأمر كذلك هل المختصة بالبت لا (والمشغلين الآخرين) يسبب أن تنتج مختلف ints الناتجة تبعا لنوع الجهاز؟

وبينما نحن في ذلك، هو الجواب نفسه لكل من مشغلي المختصة بالبت في C أو أنها لا تعتمد بشكل كبير؟

ومشغلي أنا في اشارة الى ما يلي:

~  /* bitwise Not */
&  /* bitwise And */
|  /* bitwise Or */
^  /* bitwise Exclusive-Or */

وشكرا لكم مقدما!

<القوي> تحديث: في قراءة إجاباتي حتى الآن، أجد نفسي مضطرا أن نسأل إذا المختصة بالبت لا عامل يؤثر على بت تسجيل على signed int. أخشى لقد كنت مشوشة قليلا على هذا الجزء كما نسي كل ما stillyness. آدم يبدو أن تنص على أن يتم التعامل مع كل القيم كما غير موقعة. هو علامة بت إعادة تطبيق أو لا قيمة قعت مرة واحدة تصبح غير موقعة؟

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

المحلول

ومشغلي المختصة بالبت والعوامل المنطقية كافة تعمل بشكل مماثل في آلات big- وEndian طفيف. وبالمثل، كما أنها المشغل مماثل على البيانات الموقعة وغير الموقعة: والنتيجة هي كما لو كان كل شيء غير موقعة. لذلك، إذا تم توقيع x وy الأعداد الصحيحة، ثم ~x يساوي (int)(~((unsigned int)x) وx & y يساوي (int)(((unsigned int)x) & ((unsigned int)y)، وهلم جرا لجميع المشغلين الآخرين.

نصائح أخرى

وكما تقول @ الجواب آدم، منذ هذه الشركات تذهب بعض الشيء من قبل بت، أوامر بايت لا يهم حقا! على سبيل المثال، (~x) == (-x-1) لكل signed x صحيح، بغض النظر عن طول x في بايت، وبغض النظر عن endianness الآلة (طالما أنه يستخدم two's-تكملة الحساب - هل هناك أي اليسار التي لا -؟)

ومشغلي منطقية يهتم فقط حول ما إذا كان حججهم هي صفر أم لا، فإنها لا يهمني كيف يتم تمثيل في الواقع هذه القيم في الذاكرة. لذلك لendianness العمليات المنطقية لا يهم.

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

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