كيف تثبت أن عبارة C -x ، ~ x+1 ، و ~ (x -1) تسفر عن نفس النتائج؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

أريد أن أعرف المنطق وراء هذا البيان ، الدليل. تعبير C -x ، ~ x+1 ، و ~ (x -1) جميعهم يعطيون نفس النتائج لأي x. يمكنني إظهار أن هذا صحيح لأمثلة محددة. أعتقد أن طريقة إثبات أن هذا له علاقة بخصائص تكملة اثنين. أيه أفكار؟

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

المحلول

فكر في ما تحصل عليه عند إضافة رقم إلى مكمله. يحتوي المكملات البوتينية لـ N-bit Integer X على 1 في كل مكان X يحتوي على 0 ، والعكس صحيح. لذلك من الواضح أن نرى:

x + ~ x = 0b11 ... 11 (قيمة n-bit لجميع تلك)

بغض النظر عن عدد البتات في x. علاوة على ذلك ، لاحظ أن إضافة رقم واحد إلى رقم N المملوء بكل ما سيجعله يلف إلى صفر. هكذا نرى:

x + ~ x + 1 = 0b11 ... 11 + 1 = 0 و ~ x + 1 = -x.

وبالمثل ، لاحظ (x - 1) + ~ (x - 1) = 0B11 ... 11. ثم (x - 1) + ~ (x - 1) + 1 = 0 ، و ~ (x - 1) = -x.

نصائح أخرى

لست متأكدًا من أنه يمكنك إثبات ذلك من أي نوع من البديهيات المفيدة بخلاف التخفيض التافلي إلى حد ما إلى حقيقة أننا حددنا الأرقام السلبية في عدد صحيح حديث ليكون في Twos.

أجهزة الكمبيوتر لا لديك ليتم تنفيذها باستخدام أجهزة ثنائية ثنائية ، هناك فقط العديد من الخصائص الجذابة ويتم بناء كل شيء تقريبًا بهذه الطريقة هذه الأيام. (ولكن ليس النقطة العائمة! هذه تكملة للمرء!)

لذلك نقوم ببناء جهاز يحدث ليمثل الأرقام السلبية في تكملة 2. تعتبر التعبيرات التي تُظهر الأرقام السلبية التي سيتم تمثيلها في تكملة اثنين دقيقة ، ولكن فقط لأننا حددناها بهذه الطريقة. هذا هو الأساس البديهي لأرقام عدد صحيح سلبي في الآلات الحديثة.

نظرًا لأننا نحدد النفي من حيث تكملة اثنين ، فأنت تشير بشكل أساسي إلى البديهيات ، على الرغم من أنني أفترض أن هذا ما يفعله كل البراهين في النهاية.

ربما هذا هو السبب في أنني لست حقًا رجل نظرية. :-)

~ x + 1 يعادل تكملة 2 + 1 (أي الرقم السالب) من-x ، ~ (x-1) تمثل نفس الشيء (النظر في الحالة التي يكون فيها البت الأخير 1 ، ~ (x-1) = ~ ( b1b2.b (n-1) 1-0) = b1'b2 '... b (n-1)' 1 = b1'b2 '... b (n-1)' 0 + 1 = ~ x + 1. الحالات المماثلة للحفاظ على البت الأخير هي 0. ~ (x -1) = ~ (b1b2..bi100..00 - 1) = ~ b1b2..bi011..11 = b1'b2 '.. bi'100. .00 = b1'b2 '.. bi'011..11 + 1 = ~ x + 1.

سأحاول تقديم شرح بديهي بأن الجميع يجب أن يجدوا مفيدًا. إذا أصرت على أننا قد نجرب نهجًا أكثر رسمية.

في تمثيل اثنين ، من أجل الحصول على تمثيل فريد لعنصر Zero ، فإننا نضحي عنصرًا إيجابيًا. نتيجة لذلك ، هناك رقم سالب إضافي ليس له مرآة إيجابية.

لذلك ، بالنظر إلى 2 بت ، نحصل على: {+1, 0, -1, -2} التي سيتم تمثيلها في ثنائي على النحو التالي:

-2    10
-1    11
 0    00
+1    01

لذلك ، قد نفكر في الصفر كمرآة. الآن ، بالنظر إلى عدد صحيح X ، إذا أردنا عكس علامته ، فيمكننا البدء بتقلب جميع البتات. كان هذا كافيًا إذا لم يكن هناك صفر بين الإيجابيات والسلبيات. ولكن نظرًا لأن الصفر يقوم بتحول ، في الإيجابيات ، قمنا بالتعويض عن ذلك.

التعبيران المذكوران في السؤال يجعل هذا التعويض من قبل ~(x-1) و بعد ~x+1 قلب البتات. يمكنك بسهولة التحقق من ذلك باستخدام +1 و -1 في مثالنا 2 بت.

بشكل عام ، هذا ليس صحيحًا ، لأن معيار C لا يتطلب استخدام TWOS تكملة لتمثيل الأرقام السلبية.

على وجه الخصوص ، لم يتم تعريف نتيجة تطبيق ~ على نوع موقّع.

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

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