~ x + ~ y == ~ (x + y) সর্বদা মিথ্যা?


153

এই কোডটি কি সর্বদা মিথ্যা হিসাবে মূল্যায়ন করে? উভয় ভেরিয়েবল দুটি এর পরিপূরক স্বাক্ষরিত ints।

~x + ~y == ~(x + y)

আমি মনে করি এমন কিছু সংখ্যা থাকা উচিত যা শর্তগুলি সন্তুষ্ট করে। আমি সংখ্যাগুলির মধ্যে পরীক্ষা করার চেষ্টা করেছি -5000এবং 5000কখনও সমতা অর্জন করতে পারি নি। শর্তটির সমাধানগুলি খুঁজে পাওয়ার জন্য কোনও সমীকরণ স্থাপনের কোনও উপায় আছে কি?

অন্যটির জন্য একটি অদলবদল করা কি আমার প্রোগ্রামে একটি কুখ্যাত বাগের কারণ হতে পারে?


6
আপনি কি প্রমাণ বা কিছু চান?
অ্যালভিন ওয়াং

26
সচেতন হন যে স্বাক্ষরিত পূর্ণসংখ্যার অতিরিক্ত প্রবাহের ক্ষেত্রে এটি প্রযুক্তিগতভাবে সংজ্ঞায়িত আচরণ। সুতরাং এটির পক্ষে ফিরে আসা সম্ভব trueএমনকি যদি তারা কখনও কঠোর দু'টির পরিপূরককে ধরে নাও নেয়।
রহস্যময়

1
@ অ্যালভিনওয়ং হ্যাঁ একটি ব্যাখ্যা ভাল লাগবে
স্টিভ

1
@ স্টিভ: আপনি প্রমাণ করতে পেরেছেন যে আপনি সমস্ত সংমিশ্রণে সমস্ত সাধারণ সন্দেহভাজন (-1, 0, 1, 2, এবং আরও) চেষ্টা করেছেন, পাশাপাশি ছোট শব্দ আকারের সমস্যার "সমাধান" করার আপনার প্রচেষ্টাও ( তিন বিট? চার বিট?)। এটি অবশ্যই আমাদের বোঝাতে সহায়তা করবে যে আমরা কাউকে কেবল এমন কিছু পেতে সহায়তা করছি না যা তারা নিজের জন্য প্রথমে উপার্জনের চেষ্টা করেনি। :)
22

4
@ অ্যালেক্সলকউড যখন আমি প্রথম প্রশ্নটি পোস্ট করলাম তখন আমি "হোমওয়ার্ক" হিসাবে প্রশ্নটি ট্যাগ করা লোকেরা আমাকে সমস্যার সমাধান করতে সহায়তা করার জন্য ক্লু সরবরাহ করতে বলে ("হোমওয়ার্ক" ট্যাগের বর্ণনা অনুযায়ী) কেবল উত্তর দেয় না ass এজন্য আমি কেবল স্পষ্টভাবে সমস্যার প্রশ্ন জিজ্ঞাসা করেছি :)
স্টিভ

উত্তর:


237

দ্বন্দ্বের খাতিরে ধরে নিন যে এখানে কিছু xএবং কিছু y(Mod 2 n ) রয়েছে

~(x+y) == ~x + ~y

দু'জনের পরিপূরক * দ্বারা, আমরা জানি যে,

      -x == ~x + 1
<==>  -1 == ~x + x

এই ফলাফলটি লক্ষ্য করে আমাদের রয়েছে,

      ~(x+y) == ~x + ~y
<==>  ~(x+y) + (x+y) == ~x + ~y + (x+y)
<==>  ~(x+y) + (x+y) == (~x + x) + (~y + y)
<==>  ~(x+y) + (x+y) == -1 + -1
<==>  ~(x+y) + (x+y) == -2
<==>  -1 == -2

অতএব, একটি বৈপরীত্য। অতএব, ~(x+y) != ~x + ~yসকলের জন্য xএবং y(মোড 2 এন )।


* এটি যে নিজের সম্পূরক গাণিতিক সহ মেশিনে, সমতা আসলে সবার জন্য সত্য নোট আকর্ষণীয় xএবং y। এটি কারও পরিপূরক অধীনে ~x = -x,। এইভাবে ~x + ~y == -x + -y == -(x+y) == ~(x+y),।


47
অবশ্যই, সি এই আচরণের প্রয়োজন হয় না; এটির জন্য দু'জনের পরিপূর্ণ প্রতিনিধিত্বের প্রয়োজন নেই require
বিলি ওনিল

12
বিটিডব্লিউ, সমতাটি একজনের পরিপূরক হিসাবে সত্য । সাধারণভাবে সংখ্যার জন্য অপারেশনটি সত্যই সংজ্ঞায়িত হয় না, সুতরাং সংখ্যার প্রতিনিধিত্বের উপর নির্ভর করে বিভিন্ন আচরণে সংযোজন ফলাফলের সাথে মেশানো নয়।
nhahtdh

9
প্রত্যেকে স্বাক্ষরবিহীন পূর্ণসংখ্যার জন্য সমস্যাটি পুনঃস্থাপন করতে পারে এবং তারপরে দ্বিগুণ পরিপূরক মোটেও কার্যকর হয় না।
আর .. গীটহাব থামান হেল্পিং আইসিসি

5
এমনকি সহজ, এই প্রোগ্রামটিতে: ~x == -(x+1), তাই ~(x+y) == ~x + ~yবোঝা -(x+y+1) == -(x+1) + -(y+1)বোঝা-1 == -2
BlueRaja - ড্যানি Pflughoeft

7
@ বিলিওনিল, চিন্তা করবেন না, আমি কেবল রসিকতা করছি এবং আমি এটির প্রশংসা করি যে আপনি এটি উল্লেখ করেছেন :)। আমি যেদিন এমন কোনও মেশিনের মুখোমুখি হব যেটি তার পরিপূরক পাটিগণিত সম্পাদন করবে ... সে শব্দটি কী করে? হা হা
অ্যালেক্স লকউড

113

দু'জনের পরিপূরক

উপর সুবিশাল কম্পিউটারের সংখ্যাগরিষ্ঠ, যদি xএকটি পূর্ণসংখ্যা, তারপর -xহিসাবে প্রতিনিধিত্ব করা হয় ~x + 1। সমানভাবে ~x == -(x + 1),। আপনার সমীকরণে এই বিকল্পটি তৈরি করা দেয়:

  • ~ x + ~ y == ~ (x + y)
  • - (x + 1) + - (y + 1) = - ((x + y) + 1)
  • -x - y - 2 = -x - y - 1
  • -2 = -1

যা একটি বৈপরীত্য, তাই ~x + ~y == ~(x + y)সর্বদা মিথ্যা


এটি বলেছিল, শিশুরা নির্দেশ করবে যে সি এর দু'টির পরিপূরক প্রয়োজন হয় না, তাই আমাদের অবশ্যই বিবেচনা করতে হবে ...

একের পরিপূরক

ইন একজনের পরিপূরক , -xকেবল হিসাবে প্রতিনিধিত্ব করা হয় ~x। জিরো একটি বিশেষ কেস, সমস্ত -0 এর ( +0) এবং অল -1 এর ( -0) উভয় উপস্থাপনা +0 == -0থাকলেও আইআইআরসি, সি তাদের বিট বিট প্যাটার্ন থাকলেও প্রয়োজন হয়, সুতরাং এটি সমস্যা হওয়া উচিত নয়। শুধু বিকল্প ~সঙ্গে -

  • ~ x + ~ y == ~ (x + y)
  • -x + (-y) = - (x + y)

যা সত্য সবার জন্য xএবং y


13
এমন উত্তরের জন্য +1 যা উভয়ের পরিপূরক এবং সমপরিমাণের পরিপূরক উভয়কেই বিবেচনা করে।
একটি সিভিএন

13
@ dan04 +0 == -0,। পরিশেষে এমন কিছু যা সি
অ্যালেক্স লকউড

32

উভয়ের মধ্যে কেবলমাত্র ডানদিকে বিবেচনা করুন xএবং y( x == 13যেমন । যদি এটি 1101বেস 2 তে থাকে তবে আমরা কেবল সর্বশেষ বিটটি দেখব, ক 1) তারপরে সম্ভাব্য চারটি ক্ষেত্রে রয়েছে:

x = 0, y = 0:

এলএইচএস: ~ 0 + ~ 0 => 1 + 1 => 10
আরএইচএস: ~ (0 + 0) => ~ 0 => 1

x = 0, y = 1:

এলএইচএস: ~ 0 + ~ 1 => 1 + 0 => 1
আরএইচএস: ~ (0 + 1) => ~ 1 => 0

x = 1, y = 0:

আমি এটি আপনার কাছে ছেড়ে দেব যেহেতু এটি হোমওয়ার্ক (ইঙ্গিত: এটি x এবং y অদলবদলের সাথে আগেরটির মতো)।

x = 1, y = 1:

আমি এটিকে আপনার কাছেও রেখে দেব।

যে কোনও সম্ভাব্য ইনপুট দেওয়া সমীকরণের বাম হাত এবং ডানদিকে আপনি ডানদিকের বিটটি সর্বদা পৃথক হতে পারেন তা আপনি প্রমাণ করতে পারেন যে উভয় পক্ষই সমান নয়, যেহেতু তাদের কমপক্ষে একটি বিট রয়েছে যা উল্টানো আছে একে অপরের থেকে.


27

বিটের সংখ্যা এন হলে

~x = (2^n - 1) - x
~y = (2^n - 1) - y


~x + ~y = (2^n - 1) +(2^n - 1) - x - y =>  (2^n + (2^n - 1) - x - y ) - 1 => modulo: (2^n - 1) - x - y - 1.

এখন,

 ~(x + y) = (2^n - 1) - (x + y) = (2^n - 1) - x - y.

সুতরাং, 1 এর পার্থক্যের সাথে তারা সর্বদা অসম হবে।


4
@ নাহহধঃ এবং আপনি ~অ-স্থির প্রস্থের সংখ্যায় অপারেশনকে কীভাবে সংজ্ঞায়িত করবেন ?
হ্যামস্টারজিন

1
আমি এই সংখ্যাটি বিটের সাথে এই উত্তরটি দিয়েছি যাতে ক্লাসে যা শেখানো হয় তার সাথে সম্পর্কিত হওয়া সহজ। নোট করুন যে represent x সংখ্যাটি উপস্থাপন করতে ব্যবহৃত এনট বিটের সংখ্যার উপর নির্ভরশীল। সুতরাং পরীক্ষামূলকভাবে এটি যাচাই করার চেষ্টা করার সময় এটির সাথে লেগে থাকা বুদ্ধিমানের।
কার্তিক কুমার বিশ্বনাথন

1
@ হ্যামস্টারজিন: আমি জানি যে বিটের সংখ্যা নির্ধারিত, তবে আমার বক্তব্যটি এটির পরিমাণ (8, 16, ইত্যাদি) হতে হবে না।
নাহধঃ

1
এগুলি মানগুলি যার জন্য উত্তর যাচাই করার জন্য কোনও প্রোগ্রাম লিখতে সহজ। এটি যে কোনও এন এর জন্য কাজ করে, যতক্ষণ না ~ x এবং ~ y প্রদত্ত সাথে মিলে যায়।
কার্তিক কুমার বিশ্বনাথন

1
@ হ্যামস্টারজিন: প্রমাণের সাথে আমার কোনও সমস্যা নেই, সংখ্যাগুলি যে মিথ্যা জবাব দেয় যে এটি কেবলমাত্র এই ক্ষেত্রে কাজ করে।
nhahtdh

27

ইঙ্গিত:

x + ~x = -1(মড 2 এন )

প্রশ্নের লক্ষ্য ধরে নেওয়া আপনার গণিতটি পরীক্ষা করছে (আপনার পাঠ্য-সি-স্পেসিফিকেশন দক্ষতার চেয়ে) এটির আপনাকে উত্তরটি পাওয়া উচিত।


2
শুধুমাত্র দুটি পরিপূরক মেশিনে। (সি স্ট্যান্ডার্ডটির প্রয়োজন হয় না)
বিলি ওনিল

12
@ বিলি: এটি "কেবলমাত্র দুটি সশস্ত্র লোকের জন্য" বলার মতো।
dan04

2
@ ডান04: না, তা নয়। আমি বলতে চাই যে সমস্ত স্বাক্ষরিত পরিমাণ এবং এর পরিপূরক উপস্থাপনাগুলি বিশ্ব থেকে চলে গেছে। তবে আমি এটা বলতে ভুল হবে। সি স্ট্যান্ডার্ড আপনাকে সেই অনুমান করতে দেয় না; অতএব আমি এমন কোড বলব যা এই ধারণাটি তৈরি করে যে বেশিরভাগ সময় খারাপ কোড হয়। (বিশেষত যখন বিড টুইডলিংয়ের চেয়ে স্বাক্ষরযুক্ত সংখ্যার সাথে জড়িত হওয়ার আরও ভাল উপায় থাকে; এবং বিশেষত যখন স্বাক্ষরযুক্ত সংখ্যাগুলি সম্ভবত বেশিরভাগ সময়ই ভাল পছন্দ হয়)
বিলি ওনিল

10

কারও এবং দু'জনের (এবং 42-এর দশকেও) পরিপূরকগুলিতে, এটি প্রমাণিত হতে পারে:

~x + ~y == ~(x + a) + ~(y - a)

এখন যাক a = yএবং আমাদের আছে:

~x + ~y == ~(x + y) + ~(y - y)

বা:

~x + ~y == ~(x + y) + ~0

সুতরাং দুটি পরিপূরক যে ~0 = -1, প্রস্তাব মিথ্যা।

কারও পরিপূরক হিসাবে ~0 = 0, প্রস্তাবটি সত্য।


7

ডেনিস রিচি বই অনুসারে সি ডিফল্টভাবে দু'জনের পরিপূরক প্রয়োগ করে না। অতএব, আপনার প্রশ্ন সর্বদা সত্য হতে পারে না।


5

ইন্ট MAX_INTদ্বারা প্রতিনিধিত্ব করা আবশ্যক 011111...111(তবে অনেক বিট থাকলেও)। তারপরে আপনি তা জানেন ~x + x = MAX_INTএবং ~y + y = MAX_INTতাই অতএব আপনি নিশ্চিতভাবে জানতে পারবেন যে পার্থক্য ~x + ~yএবং এর ~(x + y)মধ্যে 1


5

সি এর প্রয়োজন হয় না যে দুটিটির পরিপূরক বাস্তবায়িত হয়। তবে স্বাক্ষরবিহীন পূর্ণসংখ্যার জন্য একই রকম লজিক প্রয়োগ করা হয়। পার্থক্য সর্বদা 1 এই যুক্তির আওতায় থাকবে!


3

অবশ্যই, সি এর আচরণের প্রয়োজন নেই কারণ এটির জন্য দু'জনের পরিপূর্ণ প্রতিনিধিত্বের প্রয়োজন নেই। উদাহরণস্বরূপ, ~x = (2^n - 1) - x& ~y = (2^n - 1) - yএই ফলাফলটি পাবেন।


0

আহ, মৌলিক স্বতন্ত্র গণিত!

দে মরগানের আইন পরীক্ষা করে দেখুন

~x & ~y == ~(x | y)

~x | ~y == ~(x & y)

বুলিয়ান প্রমাণগুলির জন্য খুব গুরুত্বপূর্ণ!


ঠিক সরল ভুল। সি + তে যোগ, * গুণ এবং না বুলিয়ান বা বা এবং।
স্পষ্টত

সঠিকভাবে ভুল অপারেটরগুলি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। এটি এখন সঠিক অপারেটরগুলির সাথে আপডেট করা হয়েছে, যদিও আপনি সঠিক যে এটি মূল প্রশ্নের ক্ষেত্রে প্রযোজ্য নয়।
ডেভিড ক্যাসিনস্কি

1
ঠিক আছে, সত্য যদি এক হয় এবং মিথ্যাটি শূন্য হয়, তবে + এবং * ঠিক বা হিসাবে বা হিসাবে আচরণ করে এবং এবং আরও দুটির পরিপূরক এর মতো না করে আচরণ করে, সুতরাং আইনটি তবুও প্রযোজ্য।

এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ, a1an। আমি চিন্তা করার চেষ্টা করছিলাম যে ডি মরগানের আইনগুলি এখনও মূল প্রশ্নের ক্ষেত্রে প্রযোজ্য হতে পারে তবে আমি সি প্রোগ্রামিং বা বিচ্ছিন্ন গণিত উভয়ই অধ্যয়ন করেছি, বেশ কয়েক বছর পরে গেছে।
ডেভিড ক্যাসিনস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.