কেন 0 মিথ্যা?


115

এই প্রশ্নটি বোবা লাগতে পারে তবে বেশিরভাগ প্রোগ্রামিং ভাষাতেই কেন 0মূল্যায়ন falseএবং অন্য কোনও [পূর্ণসংখ্যা] মান হয় true?

স্ট্রিং তুলনা

যেহেতু প্রশ্নটি কিছুটা খুব সহজ বলে মনে হচ্ছে, আমি নিজেকে আরও কিছুটা ব্যাখ্যা করব: প্রথমত, এটি কোনও প্রোগ্রামারের কাছে স্পষ্ট মনে হতে পারে তবে কোনও প্রোগ্রামিং ভাষা কেন থাকবে না - সেখানে আসলে থাকতে পারে, তবে কোনওটি নয় আমি ব্যবহৃত - যেখানে 0মূল্যায়ণ trueএবং সব অন্যান্য [পূর্ণসংখ্যা] এর এমন মানগুলি false? এই মন্তব্যটি এলোমেলো মনে হতে পারে তবে আমার কয়েকটি উদাহরণ রয়েছে যেখানে এটি ভাল ধারণা হতে পারে। প্রথমত, আসুন স্ট্রিংগুলির ত্রি-দিকী তুলনার উদাহরণটি ধরুন, আমি সি এর strcmpউদাহরণ হিসাবে গ্রহণ করব : যে কোনও প্রোগ্রামার সি এর প্রথম ভাষা হিসাবে চেষ্টা করছেন নিম্নলিখিত কোডটি লেখার জন্য প্ররোচিত হতে পারে:

if (strcmp(str1, str2)) { // Do something... }

যেহেতু strcmpরিটার্নগুলি 0যা falseস্ট্রিংগুলি সমান হয় তার জন্য মূল্যায়ন করে , প্রারম্ভিক প্রোগ্রামার যা চেষ্টা করেছিল তা খারাপভাবে ব্যর্থ হয় এবং কেন প্রথমে সে সাধারণত বুঝতে পারে না। ছিল 0থেকে মূল্যায়ন trueপরিবর্তে, এই ফাংশন তার সবচেয়ে সহজ অভিব্যক্তি ব্যবহার করা হয়ে থাকতে পারে - উপরে এক - যখন সমতার জন্য তুলনা এবং সঠিক চেক -1এবং 1হবে শুধুমাত্র সম্পন্ন হয়েছে যখন প্রয়োজন ছিল। আমরা বেশিরভাগ সময় রিটার্নের ধরণটিকে bool(আমাদের মনে মনে) বিবেচনা করব।

তাছাড়া, এর একটি নতুন ধরনের পরিচয় করিয়ে যাক, sign, যে শুধু মান লাগে -1, 0এবং 1। এটি বেশ সহজ হতে পারে। ভাবুন যে সি ++ তে কোনও স্পেসশিপ অপারেটর রয়েছে এবং আমরা এটির জন্য চাই std::string(ভাল, ইতিমধ্যে compareফাংশনটি রয়েছে, তবে স্পেসশিপ অপারেটর আরও মজাদার)। ঘোষণাটি বর্তমানে নিম্নলিখিতটি হবে:

sign operator<=>(const std::string& lhs, const std::string& rhs);

যদি এটির 0মূল্যায়ন করা হত true, স্পেসশিপ অপারেটরটিও উপস্থিত না থাকত এবং আমরা operator==সেভাবে ঘোষণা করতে পারতাম :

sign operator==(const std::string& lhs, const std::string& rhs);

এটি operator==একবারে ত্রি-উপায়ে তুলনা পরিচালনা করতে পারে এবং প্রয়োজনের সময় কোন স্ট্রিংটি অভিধানের চেয়ে অন্যের চেয়ে উচ্চতর কিনা তা পরীক্ষা করতে সক্ষম হয়েও নিম্নলিখিত চেকটি সম্পাদন করতে ব্যবহৃত হতে পারে:

if (str1 == str2) { // Do something... }

পুরানো ত্রুটিগুলি পরিচালনা করা

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

#define TRUE 0
// ...
if (some_function() == TRUE)
{
    // Here, TRUE would mean success...
    // Do something
}

প্রোগ্রামিংয়ে আমরা কীভাবে চিন্তা করি সে সম্পর্কে যদি আমরা চিন্তা করি তবে আমাদের প্রায়শই নিম্নলিখিত যুক্তিযুক্ত ধরণ থাকে:

Do something
Did it work?
Yes ->
    That's ok, one case to handle
No ->
    Why? Many cases to handle

যদি আমরা এটা সম্পর্কে আবার মনে হয়, এটি শুধুমাত্র নিরপেক্ষ মান, লাগাতে ইন্দ্রিয় দিতেন 0, এর yes(এবং যে কিভাবে সি এর ফাংশন কাজ আছে), যখন সব অন্যান্য মান থাকতে পারে অনেক ক্ষেত্রে সমাধান করতে no। তবে, আমি জানি সমস্ত প্রোগ্রামিং ভাষায় (সম্ভবত কিছু পরীক্ষামূলক এ্যাসোথেরিক ভাষাগুলি বাদে) কোনও অবস্থাতেই yesমূল্যায়ন করে , যখন সমস্ত ক্ষেত্রে মূল্যায়ন হয় । অনেকগুলি পরিস্থিতি যখন "এটি কাজ করে" একটি ক্ষেত্রে উপস্থাপন করে যখন "এটি কাজ করে না" অনেকগুলি সম্ভাব্য কারণকে উপস্থাপন করে। আমরা যদি সেভাবে এটির বিষয়ে চিন্তা করি তবে মূল্যায়ন করা এবং বাকিগুলি আরও অনেক বেশি অর্থবোধ করে।falseifnotrue0truefalse

উপসংহার

কেন আমরা ভাষায় ডিজাইন কোথায়: আমার উপসংহার মূলত আমার মূল প্রশ্ন হল 0হল falseএবং অন্যান্য মান true, আমার কয়েকটি উদাহরণ উপরে এবং হয়ত আরো কিছু আমি মনে করি না অ্যাকাউন্ট নিচ্ছে?

ফলোআপ: অনেক ধারণা সহ অনেক উত্তর রয়েছে এবং এটির মতো হওয়ার সম্ভাব্য অনেকগুলি কারণ রয়েছে তা দেখে ভাল লাগছে। আপনি এটি সম্পর্কে মনে হয় কতটা উত্সাহী আমি ভালবাসি। আমি উদাসীনতার কারণে এই প্রশ্নটি জিজ্ঞাসা করেছি, তবে আপনি যেহেতু অনুরাগী বলে মনে হচ্ছে, তাই আমি সিদ্ধান্ত নিয়েছিলাম আরও কিছুটা এগিয়ে গিয়ে ম্যাথ.এসইতে 0 এবং 1 এর জন্য বুলিয়ান পছন্দের পিছনে যুক্তি জিজ্ঞাসা করার :)


32
strcmp()সত্য বা মিথ্যা জন্য এটি কোনও ভাল উদাহরণ নয়, কারণ এটি 3 টি বিভিন্ন মান দেয়। এবং আপনি যখন শেল ব্যবহার শুরু করেন, তখন আপনি অবাক হবেন, যেখানে 0 এর অর্থ সত্য এবং অন্য কোনও কিছুর অর্থ মিথ্যা।
অট--

52
@ অট--: ইউনিক্স শেলগুলিতে 0 এর অর্থ সাফল্য এবং অ-শূন্য মানে ব্যর্থতা - "সত্য" এবং "মিথ্যা" এর মতো একই জিনিস নয়।
কিথ থম্পসন

14
@ কিথথম্পসন: বাশে (এবং অন্যান্য শেলস) "সাফল্য" এবং "ব্যর্থতা" সত্যই "সত্য" এবং "মিথ্যা" সমান। বিবেচনা করুন, উদাহরণস্বরূপ, বিবৃতি if true ; then ... ; fi, যেখানে trueএকটি কমান্ড যে শূন্য ফেরৎ এবং এই বলে ifচালানোর জন্য ...
রুখ

13
হার্ডওয়্যারটিতে কোনও বুলিয়ান নেই, কেবলমাত্র বাইনারি সংখ্যা এবং বেশিরভাগ ISতিহাসিক আইএসএতে শর্তসাপেক্ষ শাখাগুলি নির্দেশাবলীতে (শূন্য পরিবর্তে পতাকা ব্যবহার না করা) একটি শূন্য-সংখ্যাটিকে "সত্য" হিসাবে বিবেচনা করা হয়। সুতরাং, নিম্ন স্তরের ভাষাগুলি যে কোনও উপায়ে অন্তর্নিহিত হার্ডওয়্যার বৈশিষ্ট্যগুলি অনুসরণ করতে বাধ্য।
এসকে-যুক্তি

2
@ ম্যাসনওহিলার একটি বুলিয়ান টাইপ থাকা কিছুই বোঝায় না। উদাহরণস্বরূপ পাইথন করে একটি আছে boolটাইপ কিন্তু তুলনা / কোন ফেরত মান অবস্থার ইত্যাদি থাকতে পারে পারেন।
বাকুরিউ

উত্তর:


98

0হয় falseকারণ তারা কমন উভয় শূন্য উপাদানের করছি semirings । যদিও তারা স্বতন্ত্র ডেটা ধরণের, তবুও এটি তাদের মধ্যে রূপান্তর করতে স্বজ্ঞাত অর্থে তৈরি করে কারণ তারা আইসোমোরফিক বীজগণিত কাঠামোর অন্তর্ভুক্ত।

  • 0সংখ্যার জন্য পরিচয় এবং গুণনের জন্য শূন্য। এই পূর্ণসংখ্যার এবং rationals কিন্তু জন্য সত্য না আইইইই-754 ফ্লোটিং পয়েন্ট সংখ্যা: 0.0 * NaN = NaNএবং 0.0 * Infinity = NaN

  • falseবুলিয়ান-এর জন্য পরিচয় XOR (⊻) এবং শূন্য বুলিয়ান-এর জন্য এবং (∧)। যদি বুলিয়ানগুলি {0, 1 represented -}০ এর পূর্ণসংখ্যার মডিউল 2 সেট হিসাবে উপস্থাপিত হয় - আপনি ভাবতে পারেন - বহন ছাড়াও যোগফল এবং গুণন হিসাবে।

  • ""এবং []কনকেনটেশনের জন্য পরিচয়, তবে বেশ কয়েকটি ক্রিয়াকলাপ রয়েছে যার জন্য তারা শূন্য হিসাবে বোধ করে। পুনরাবৃত্তি এক, তবে পুনরাবৃত্তি এবং মনগড়া বিতরণ হয় না, সুতরাং এই ক্রিয়াকলাপগুলি একটি সেমিরিং হিসাবে তৈরি করে না।

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


1
দুর্দান্ত যে আপনি তালিকা উল্লেখ করেছেন। (বিটিডাব্লু, কমন লিস্পে nilখালি তালিকা []এবং falseমান উভয়ই ; বিভিন্ন উপাত্তের ধরণের থেকে পরিচয়গুলিকে একীভূত করার প্রবণতা কি আছে?) আপনাকে এখনও ব্যাখ্যা করতে হবে যে মিথ্যাটিকে একটি যুক্তিযুক্ত পরিচয় হিসাবে গণ্য করা কেন গুণগত পরিচয় হিসাবে সত্য? এবং অন্যভাবে না। trueজন্য চিহ্নিত ANDএবং শূন্য হিসাবে বিবেচনা করা সম্ভব নয় OR?
জর্জিও

3
অনুরূপ পরিচয় উল্লেখ করার জন্য +1। অবশেষে একটি উত্তর যা কেবল "কনভেনশন, এটির সাথে ডিল করুন" - এ সিদ্ধ হয় না।
l0b0

5
একটি কংক্রিট এবং খুব পুরানো গণিতের বিবরণ দেওয়ার জন্য +1 যা এটি অনুসরণ করা হয়েছে এবং দীর্ঘকালীন জ্ঞান হয়েছে
জিমি হোফা

1
এই উত্তরটির কোনও অর্থ নেই। trueএছাড়াও পরিচয় এবং সেমিরিংয়ের শূন্য (বুলিয়ান এবং / বা)। কোনও কারণ নেই, প্রযোজনীয় কনভেনশন, false0 এর চেয়ে নিকটতম বিবেচনা করা true
টনিওএলগ্রিংগো

1
@ টনিওএলগ্রিঙ্গো: সত্য এবং মিথ্যার মধ্যে পার্থক্য হল এক্সওআর এবং এক্সএনওরের মধ্যে পার্থক্য। আরএ্যান্ড / এক্সওআর ব্যবহার করে কেউ আইসোমর্ফিক রিং তৈরি করতে পারে, যেখানে গুণক পরিচয় সত্য এবং সংযোজকটি মিথ্যা, বা ওআর এবং এক্সএনওরের সাথে, যেখানে মিথ্যা গুণক পরিচয় এবং সত্যই সংযোজক, তবে এক্সএনওআর সাধারণত একটি সাধারণ হিসাবে বিবেচিত হয় না XOR হয় মৌলিক অপারেশন।
সুপারক্যাট

74

কারণ গণিত কাজ করে।

FALSE OR TRUE is TRUE, because 0 | 1 is 1.

... insert many other examples here.

Ditionতিহ্যগতভাবে, সি প্রোগ্রামগুলির মতো শর্ত থাকে

if (someFunctionReturningANumber())

বরং

if (someFunctionReturningANumber() != 0)

কারণ শূন্যের মিথ্যের সমতুল্য ধারণাটি ভালভাবে বোঝা গেছে।


21
ভাষাগুলি এমনভাবে তৈরি করা হয়েছে কারণ গণিতটি বোঝায়। এটি প্রথম এসেছিল।
রবার্ট হার্ভে

26
@ মরউভেন, এটি 19 শতকে এবং জর্জ বুলে ফিরে আসে। কম্পিউটার থাকার চেয়ে লোকে লোকে 0 এবং সত্য হিসাবে 0 হিসাবে প্রতিনিধিত্ব করে।
চার্লস ই। গ্রান্ট

11
আমি যদি দেখি না যে আপনি যদি কেবলমাত্র সমস্ত সংজ্ঞা পরিবর্তন করেন যাতে AND হয় এবং ও হয় * তবে গণিতটি অন্যভাবে কেন কাজ করে না।
নিল জি

7
ঠিক: গণিত উভয়ভাবেই কাজ করে এবং এই প্রশ্নের উত্তর বলে মনে হয় এটি নিখুঁতভাবে প্রচলিত।
নিল জি

6
@ রবার্ট আপনার পোস্টে "গাণিতিক আন্ডারপিনিংস" বানান করতে পারলে দুর্দান্ত লাগবে।
ফ্যান্ট0 মি

38

অন্যরা যেমন বলেছে, গণিতটি প্রথম এসেছিল। এ কারণেই 0 হয় falseএবং 1 হয় true

আমরা কোন গণিতের কথা বলছি? ডিজিটাল কম্পিউটারগুলি আসার অনেক আগে থেকেই বুলিয়ান বীজগণিতগুলি যা 1800 এর মাঝামাঝি থেকে শুরু হয়।

আপনি এটিও বলতে পারেন যে কনভেনশনটি প্রস্তাবিত যুক্তি থেকে বেরিয়ে এসেছিল , যা বুলিয়ান বীজগণিতের চেয়েও পুরানো। এটি প্রোগ্রামাররা জেনে এবং পছন্দ করে এমন অনেকগুলি যৌক্তিক ফলাফলের আনুষ্ঠানিককরণ ( false || xসমান x, true && xসমান xএবং তাই)।

মূলত আমরা দুটি উপাদান সহ একটি সেট গাণিতিক সম্পর্কে কথা বলছি। বাইনারি গণনা সম্পর্কে চিন্তা করুন। বুলিয়ান বীজগণিতগুলি এই ধারণার এবং এর তাত্ত্বিক আন্ডারপিনিংয়ের মূল the সি এর মতো ভাষার কনভেনশনগুলি কেবল একটি সহজ প্রয়োগ straight


2
আপনি অবশ্যই করতে পারেন। তবে এটিকে "স্ট্যান্ডার্ড" পথটি সাধারণ গাণিতিক (0 + 1 = 1 নয়, 0 + 1 = 0) এর সাথে ভাল মানায়।
joshin4colours

2
হ্যাঁ, তবে আপনি সংজ্ঞাটিও বিপরীত করলে আপনি সম্ভবত + এবং ওআর দিয়ে লিখবেন।
নিল জি

3
গণিতটি আগে আসেনি। গণিতটি স্বীকৃতি দিয়েছিল যে 0 এবং 1 একটি ক্ষেত্র গঠন করে, যার মধ্যে OR হ'ল গুণণের মতো এবং ওআর যোগের মতো।
কাজ

1
@ কাজ: তবে and 0, 1 OR ওআআআআআর সহ একটি ক্ষেত্র গঠন করে না।
জর্জিও

2
এটা আমার একটু যে আরো উত্তর এবং মন্তব্য বলে বিরক্তির true = 1। এটি পুরোপুরি সঠিক নয়, কারণ true != 0যা একেবারে এক নয়। একটি কারণ (একমাত্র নয়) কেন পছন্দ করা উচিত তা তুলনা করা উচিত if(something == true) { ... }
JensG

26

আমি ভেবেছিলাম ইলেক্ট্রনিক্সের "উত্তরাধিকার" এবং বুলিয়ান বীজগণিতের সাথে এটি করা দরকার, যেখানে

  • 0= off, negative, no,false
  • 1= on, positive, yes,true

strcmp ফেরৎ 0 যখন স্ট্রিং তার বাস্তবায়ন কি আছে সমান, যেহেতু তা আসলে আছে দুটি স্ট্রিং মধ্যে "দূরত্ব" নিরূপণ করা হয়। যে 0 টি মিথ্যা হিসাবে বিবেচিত হয় ঠিক কাকতালীয় ঘটনা।

সাফল্যে 0 ফিরিয়ে দেওয়া বোধগম্য হয় কারণ 0 এক্ষেত্রে কোনও ত্রুটি বোঝাতে ব্যবহৃত হয় এবং অন্য কোনও সংখ্যা একটি ত্রুটি কোড হবে be সাফল্যের জন্য অন্য যে কোনও সংখ্যা ব্যবহার করা আপনার পক্ষে একটিমাত্র সাফল্যের কোড রয়েছে বলে আপনার পক্ষে কম ধারণা হবে, যখন আপনার বেশ কয়েকটি ত্রুটি কোড থাকতে পারে। আপনি "এটি কাজ করে?" যদি বিবৃতিটি প্রকাশ করে এবং 0 = হ্যাঁ আরও বেশি বোঝায় তবে অভিব্যক্তিটি আরও সঠিকভাবে "কি কোনও ভুল হয়েছে?" এবং তারপরে আপনি দেখতে পাচ্ছেন যে 0 = কোন কিছুই বোঝা যায় না। চিন্তাভাবনাটি false/trueআসলে এখানে আসল অর্থ নয় no error code/error code


হাহাহা, আপনি প্রথমটি হলেন ফেরত ত্রুটির প্রশ্নটি স্পষ্টভাবে জানিয়েছেন। আমি ইতিমধ্যে জানতাম যে আমি এটিকে আমার নিজের মতো করে ব্যাখ্যা করেছি এবং এটি অন্য উপায়ে জিজ্ঞাসা করতে পারে, তবে আপনি এটিকে স্পষ্টভাবে প্রকাশ করার ক্ষেত্রে প্রথম হয়েছেন (বহু উত্তর এবং মন্তব্যের বাইরে)। প্রকৃতপক্ষে, আমি এটি বলব না যে এক বা অন্যভাবে কোনও অর্থ হয় না, তবে আরও উভয়ই বিভিন্ন উপায়ে
বোঝায়

1
আসলে আমি বলতে চাই 0জন্য success/no errorশুধু যে অর্থে তোলে যখন অন্য পূর্ণসংখ্যার ত্রুটি কোডের প্রতিনিধিত্ব নেই। এটি অন্যান্য ক্ষেত্রেও 0উপস্থাপন করা falseসত্যই গুরুত্বপূর্ণ নয়, যেহেতু আমরা এখানে মোটেও সত্য বা মিথ্যা কথা বলছি না;)
Svish

আমি একই ধারণা পেয়েছিলাম তাই আমি আপ করেছি
ব্যবহারকারী 60812

1
strcmp()দূরত্ব গণনার বিষয়ে আপনার বক্তব্যটি বেশ ভাল। এটা বলা হত strdiff()তারপর if (!strdiff())খুব যৌক্তিক হতে হবে।
কেভিন কক্স

"ইলেক্ট্রনিক্স [...] যেখানে 0 = [...] মিথ্যা, 1 = [...] সত্য" - এমনকি বৈদ্যুতিনগুলিতেও এটি কেবল একটি সম্মেলন , এবং একমাত্র নয়। আমরা এটিকে ইতিবাচক যুক্তি বলি, তবে আপনি নেতিবাচক যুক্তিও ব্যবহার করতে পারেন, যেখানে একটি ধনাত্মক ভোল্টেজ মিথ্যা এবং নেতিবাচক সত্য নির্দেশ করে। তারপরে, আপনি যে সার্কিটটি AND এর জন্য ব্যবহার করতেন সেটি OR, OR হয়ে যায় এবং ইত্যাদি হয়ে যায়। ডি মরগানের আইনের কারণে এটি সমস্ত সমতুল্য হয়ে যায়। কখনও কখনও, আপনি সুবিধার্থে নেতিবাচক যুক্তিতে প্রয়োগ করা একটি বৈদ্যুতিন সার্কিটের কিছু অংশ পেয়ে যাবেন, সেই অংশে সেই অংশের সংকেতগুলির নামগুলি উপরে একটি বারের সাথে উল্লেখ করা হবে।
জুলে

18

এই নিবন্ধে বর্ণিত হিসাবে , মানগুলি falseএবং true0 এবং 1 এর পূর্ণসংখ্যার সাথে বিভ্রান্ত হওয়া উচিত নয়, তবে দুটি উপাদানের গ্যালোইস ফিল্ডের (সীমাবদ্ধ ক্ষেত্র) উপাদানগুলির সাথে এটি চিহ্নিত করা যেতে পারে ( এখানে দেখুন )।

ক্ষেত্রটি দুটি ক্রিয়াকলাপগুলির সাথে সেট যা নির্দিষ্ট অক্ষগুলি সন্তুষ্ট করে।

0 এবং 1 চিহ্নগুলি ক্ষেত্রের যোগমূলক এবং গুণগত পরিচয়গুলি বোঝাতে ব্যবহৃত হয় কারণ আসল সংখ্যাগুলি একটি ক্ষেত্র (তবে একটি সীমাবদ্ধ নয়) যার পরিচয় 0 এবং 1 হয় numbers

অ্যাডিটিভ পরিচয় ক্ষেত্রের 0 উপাদান, যেমন সমস্ত এক্স এর জন্য:

x + 0 = 0 + x = x

এবং গুণক পরিচয় ক্ষেত্রের উপাদান 1, যেমন সমস্ত এক্স এর জন্য:

x * 1 = 1 * x = x

দুটি উপাদানের সীমাবদ্ধ ক্ষেত্রটিতে কেবলমাত্র এই দুটি উপাদান রয়েছে, যথা: যুক্তিযুক্ত পরিচয় 0 (বা false), এবং গুণক পরিচয় 1 (বা true)। এই ক্ষেত্রের দুটি অপারেশন হ'ল লজিকাল এক্সওআর (+) এবং লজিকাল এ্যান্ড (*)।

বিঃদ্রঃ. আপনি যদি ক্রিয়াকলাপগুলি ফ্লিপ করেন (এক্সওআরটি হ'ল গুণ এবং এটি হ'ল অতিরিক্ত) তবে গুনটি অতিরিক্ত পরিমাণে বিতরণ হয় না এবং আপনার আর কোনও ক্ষেত্র নেই। এরকম ক্ষেত্রে আপনার কাছে দুটি উপাদান 0 এবং 1 (কোনও ক্রমে) কল করার কোনও কারণ নেই। এও নোট করুন যে আপনি এক্সওআর এর পরিবর্তে অপারেশন বা নির্বাচন করতে পারবেন না: আপনি ওআর / এবং সংজ্ঞা / গুণ হিসাবে যেভাবে ব্যাখ্যা করেন তা বিবেচনা করেই ফলস্বরূপ কাঠামো কোনও ক্ষেত্র নয় (ক্ষেত্রের অক্ষগুলির দ্বারা প্রয়োজনীয় হিসাবে সমস্ত বিপরীত উপাদান বিদ্যমান নেই)।

সি কার্যাদি সম্পর্কিত:

  • অনেকগুলি ফাংশন একটি পূর্ণসংখ্যা দেয় যা একটি ত্রুটি কোড। 0 অর্থ কোনও ত্রুটি নয়।
  • স্বজ্ঞাতভাবে, ফাংশন strcmpদুটি স্ট্রিংয়ের মধ্যে পার্থক্য গণনা করে। 0 এর অর্থ হল যে দুটি স্ট্রিংয়ের মধ্যে কোনও পার্থক্য নেই, অর্থাৎ দুটি স্ট্রিং সমান।

উপরোক্ত স্বজ্ঞাত ব্যাখ্যাগুলি রিটার্ন মানগুলির ব্যাখ্যা মনে রাখতে সাহায্য করতে পারে তবে কেবল গ্রন্থাগারের ডকুমেন্টেশন পরীক্ষা করা আরও সহজ।


1
আপনি যদি ইচ্ছামত এগুলিকে স্ব্যাপ করে থাকেন তবে এটির জন্য +1, গণিতগুলি আর কাজ করে না।
জিমি হোফা

2
উল্টানো: দুটি উপাদান এবং ক্রিয়াকলাপের সাথে একটি ক্ষেত্র দেওয়া * এবং +, আমরা 0 দিয়ে সত্য এবং 1 দিয়ে মিথ্যাটিকে চিহ্নিত করি We
নীল জি

1
আপনি দেখতে পাবেন যে এই উভয় সনাক্তকরণ একই ক্ষেত্রের মধ্যে সম্পন্ন হয়েছে এবং উভয়ই বুলিয়ান যুক্তির নিয়মের সাথে সামঞ্জস্যপূর্ণ। আপনার নোট দুর্ভাগ্যক্রমে ভুল :)
নীল জি

1
যদি আপনি ধরে নেন যে সত্য = 0, এবং এক্সওআরটি +, তবে সত্যটি অবশ্যই XOR এর পরিচয়। তবে এটি সত্য XOR সত্য = মিথ্যা বলে নয়। আপনি যদি এক্সটি অপারেশনটির সত্যের নতুন সংজ্ঞা না দেন তবে সত্য XOR সত্য = সত্য। তারপরে অবশ্যই আপনার নির্মাণ কাজ করে কারণ আপনি সবেমাত্র জিনিসের নাম পরিবর্তন করেছেন (যে কোনও গাণিতিক কাঠামোয় আপনি সর্বদা সাফল্যের সাথে একটি নাম অনুবর্তন করতে এবং একটি আইসোমরফিক কাঠামো পেতে পারেন)। অন্যদিকে, আপনি যদি সত্য, মিথ্যা এবং XOR এর যথাযথ অর্থ রাখতে দেন তবে সত্য XOR সত্য = মিথ্যা এবং সত্যের যোগমূলক পরিচয় হতে পারে না, অর্থাৎ সত্য 0 হতে পারে না
জর্জিও

1
@ জর্জিও: আমি আমার শেষ মন্তব্যে আপনার মন্তব্য অনুসারে আমার নির্মাণ সংশোধন করেছি…
নীল জি

13

আপনার বিবেচনা করা উচিত যে বিকল্প সিস্টেমগুলি গ্রহণযোগ্য ডিজাইনের সিদ্ধান্তও হতে পারে।

শেলস: 0 প্রস্থান স্থিতিটি সত্য, অ-শূন্যটি মিথ্যা

0 টি প্রস্থান স্থিতিটিকে সত্য হিসাবে বিবেচনা করা শাঁসের উদাহরণ ইতিমধ্যে উল্লেখ করা হয়েছে।

$ ( exit 0 ) && echo "0 is true" || echo "0 is false"
0 is true
$ ( exit 1 ) && echo "1 is true" || echo "1 is false"
1 is false

সেখানকার যুক্তিটি হ'ল সফল হওয়ার একটি উপায় আছে তবে ব্যর্থ হওয়ার অনেকগুলি উপায় রয়েছে, সুতরাং 0 কে বিশেষ মূল্য হিসাবে "ত্রুটি নয়" অর্থ হিসাবে ব্যবহার করা যুক্তিযুক্ত।

রুবি: 0 অন্যান্য সংখ্যার মতোই

"সাধারণ" প্রোগ্রামিং ভাষার মধ্যে, কিছু রুচির মতো বিদেশী রয়েছে যারা 0 কে সত্যিকারের মান বলে মনে করে।

$ irb
irb(main):001:0> 0 ? '0 is true' : '0 is false'
=> "0 is true"

যুক্তিটি কেবল এটি falseএবং nilমিথ্যা হওয়া উচিত। অনেক রুবি নববিদের জন্য এটি একটি গ্যাচা। তবে কিছু ক্ষেত্রে, এটি দুর্দান্ত যে 0 টি অন্য কোনও সংখ্যার মতোই আচরণ করা হয়।

irb(main):002:0> (pos = 'axe' =~ /x/) ? "Found x at position #{pos}" : "x not found"
=> "Found x at position 1"
irb(main):003:0> (pos = 'xyz' =~ /x/) ? "Found x at position #{pos}" : "x not found"
=> "Found x at position 0"
irb(main):004:0> (pos = 'abc' =~ /x/) ? "Found x at position #{pos}" : "x not found"
=> "x not found"

তবে, এই জাতীয় সিস্টেম কেবল এমন ভাষায় কাজ করে যা বুলিয়ানদের সংখ্যা থেকে পৃথক প্রকার হিসাবে আলাদা করতে সক্ষম। কম্পিউটিংয়ের আগের দিনগুলিতে, এসেম্বলি ভাষা বা কাঁচা মেশিনের ভাষা নিয়ে কর্মরত প্রোগ্রামারদের তেমন কোনও বিলাসিতা ছিল না। 0 টিটিকে "ফাঁকা" রাষ্ট্র হিসাবে বিবেচনা করা খুব সহজ এবং স্বাভাবিকভাবেই কোডটি সনাক্ত হয়েছে যে কোডটি কিছু ঘটেছে। এক্সটেনশন দ্বারা, কনভেনশনটি বিকাশ করেছিল যে শূন্যকে মিথ্যা হিসাবে গণ্য করা হয়েছিল, এবং শূন্যহীন মানগুলি সত্য হিসাবে বিবেচিত হয়েছিল। তবে, এটি সেভাবে হতে হবে না।

জাভা: নাম্বারগুলিকে মোটেই বুলেটিয়ান হিসাবে গণ্য করা যায় না

জাভাতে trueএবং falseএকমাত্র বুলিয়ান মান। নম্বরগুলি বুলিয়ান নয়, এমনকি বুলিয়ানগুলিতেও কাস্ট করা যাবে না ( জাভা ভাষার স্পেসিফিকেশন, সেক 4.2.2 ):

অবিচ্ছেদ্য প্রকার এবং প্রকারের মধ্যে কোনও কাস্ট নেই boolean

এই নিয়মটি কেবল প্রশ্নটিকে পুরোপুরি এড়িয়ে চলে - সমস্ত বুলিয়ান এক্সপ্রেশন স্পষ্টভাবে কোডে লিখতে হবে।


1
রেবোল এবং লাল উভয়ই 0-মূল্যবান INTEGER ব্যবহার করে! মান হিসাবে সত্য, এবং একটি পৃথক NONE আছে! টাইপ (শুধুমাত্র একটি মান সহ, কোন নয়) লোগিক ছাড়াও শর্তযুক্ত মিথ্যা হিসাবে বিবেচিত! মিথ্যা। আমি জাভাস্ক্রিপ্ট কোড লেখার চেষ্টা করে উল্লেখযোগ্য হতাশা পেয়েছি যা 0 কে মিথ্যা বলে গণ্য করে; এটি গতিশীল টাইপযুক্ত ভাষার জন্য অবিশ্বাস্যরূপে এক ক্লঙ্কি সিদ্ধান্ত। আপনি যদি এমন কিছু পরীক্ষা করতে চান যা শূন্য বা 0 হতে পারে তবে আপনি লিখতে বাধ্য হবেন if (thing === 0), এটি ঠিক দুর্দান্ত নয়।
হোস্টাইলফোর্ক

পছন্দ করেছেন আমি দেখি যে এটা জ্ঞান করে নির্মিত হয় 0হয় true(প্রতি অন্যান্য পূর্ণসংখ্যা হিসাবে) একটি গতিশীল ভাষায়। পাইথনে 0ধরার চেষ্টা করার সময় আমি মাঝে মাঝে একটি ধরতে পেরেছিলাম Noneএবং এটি কখনও কখনও খুঁজে পাওয়া বেশ কঠিনও হতে পারে।
মরউভেন

2
রুবি কোনও আউটলেটর নয়। রুবি এটি লিস্পের কাছ থেকে নেয় (রুবি এমনকি গোপনে "ম্যাটজলিস্প" নামে পরিচিত)। কম্পিউটার বিজ্ঞানে লিস্প একটি মূলধারার ভাষা। জিরো এছাড়াও, শুধু POSIX শেল মধ্যে একটি সত্য মান কারণ এটি একটি পাঠ্যাংশ রয়েছে: if [ 0 ] ; then echo this executes ; fi। মিথ্যা ডেটা মানটি একটি খালি স্ট্রিং, এবং একটি পরীক্ষণযোগ্য মিথ্যাচার হ'ল একটি কমান্ডের একটি ব্যর্থ সমাপ্তির স্থিতি, যা নন- এজো দ্বারা প্রতিনিধিত্ব করা হয় ।
কাজ

8

সাধারণ ক্ষেত্রে সম্বোধনের আগে, আমরা আপনার পাল্টা উদাহরণগুলি নিয়ে আলোচনা করতে পারি।

স্ট্রিং তুলনা

একই সাথে অনেক ধরণের তুলনা করা হয়। এই জাতীয় তুলনা দুটি বস্তুর মধ্যে একটি দূরত্ব গণনা করে। বস্তু সমান হলে দূরত্বটি ন্যূনতম হয়। সুতরাং যখন "তুলনা সফল", মান 0. কিন্তু সত্যিই, ফেরত মান strcmpহয় না একটি বুলিয়ান, এটি একটি দূরত্ব, এবং কি যাত্রীর সঙ্গের নিজলটবহর যে অবিদিত প্রোগ্রামারদের করছেন if (strcmp(...)) do_when_equal() else do_when_not_equal()

সি ++ তে আমরা strcmpকোনও Distanceঅবজেক্ট ফিরিয়ে আনতে আবার ডিজাইন করতে পারি , যা operator bool()0 হলে সত্যটি ফিরে আসার জন্য ওভাররাইড করে (তবে আপনি তখন সমস্যার বিভিন্ন সেট দ্বারা দংশিত হন)। অথবা প্লেইন সি-তে কেবল একটি streqফাংশন রয়েছে যা স্ট্রিং সমান হলে 1 এবং অন্যথায় 0 প্রদান করে।

এপিআই কল / প্রোগ্রামের প্রস্থান কোড

এখানে কিছু ভুল হওয়ার কারণ সম্পর্কে আপনি যত্নশীল, কারণ এটি সিদ্ধান্তগুলিকে ত্রুটিযুক্ত করে তুলবে। যখন জিনিসগুলি সফল হয়, আপনি বিশেষভাবে কিছু জানতে চান না - আপনার অভিপ্রায়টি উপলব্ধি হয়ে গেছে। রিটার্ন মান অবশ্যই এই তথ্য পৌঁছে দিতে হবে। এটা না একটি বুলিয়ান, এটি একটি ত্রুটির কোড হয়। বিশেষ ত্রুটির মান 0 এর অর্থ "ত্রুটি নেই"। বাকি রেঞ্জটি আপনাকে স্থানীয়ভাবে অর্থবহ ত্রুটিগুলি উপস্থাপন করে যা আপনার সাথে মোকাবেলা করতে হবে (1 সহ, যা প্রায়শই "অনির্দিষ্ট ত্রুটি" হিসাবে বোঝায়)।

জেনারেল কেস

এটি আমাদের এই প্রশ্নটি ছেড়ে দেয়: কেন বুলিয়ান মান Trueএবং Falseসাধারণত যথাক্রমে 1 এবং 0 হয়?

আচ্ছা, বিষয়টিকে "এটি এইভাবে ভাল বোধ করে" যুক্তি ছাড়াও এখানে কয়েকটি কারণ (বিষয়বস্তু হিসাবেও) আমি ভাবতে পারি:

  • বৈদ্যুতিক সার্কিট উপমা। বর্তমানটি 1 সেকেন্ডের জন্য, এবং 0 এর জন্য বন্ধ রয়েছে। আমি অন্য এক মিশ্রণের পরিবর্তে (1, হ্যাঁ, সত্য, অন) একসাথে থাকতে এবং (0, না, মিথ্যা, বন্ধ) পছন্দ করি

  • স্মৃতি সূচনা। যখন আমি memset(0)ভেরিয়েবলগুলির একগুচ্ছ (সেগুলি অন্তর্নিহিত, ভাসমান, বুলস হোন) আমি চাই তাদের মানটি সবচেয়ে রক্ষণশীল অনুমানের সাথে মেলে। যেমন আমার যোগফল 0 হয়, প্রিডিটেক্টটি মিথ্যা ইত্যাদি etc.

সম্ভবত এই সমস্ত কারণগুলি আমার শিক্ষার সাথে জড়িত - যদি আমাকে প্রথম থেকেই সত্যের সাথে শরিক করতে শেখানো হত, তবে আমি অন্য পথে যেতে চাই।


2
আসলে কমপক্ষে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে যা 0 টিকে সত্য বলে গণ্য করে। ইউনিক্স শেল
জানু হুডেক

আসল ইস্যুটি মোকাবিলার জন্য +1: মরওভেনের বেশিরভাগ প্রশ্ন মোটেই boolনয়।
dan04

@ dan04 এটি। পুরো পোস্টটি ঢালাই পছন্দ পিছনে যুক্তিপূর্ণ সম্পর্কে থেকে intথেকে boolবিভিন্ন প্রোগ্রামিং ভাষাতে। তুলনা এবং ত্রুটি আইজেশন স্টাফ কেবল স্থানগুলির উদাহরণ যেখানে এটি বর্তমানে সম্পন্ন করা তার চেয়ে অন্যভাবে কাস্ট করা অর্থবোধ করবে।
মরউভেন

6

উচ্চ-স্তরের দৃষ্টিকোণ থেকে, আপনি তিনটি ভিন্ন ভিন্ন ডেটা ধরণের কথা বলছেন:

  1. একটি বুলিয়ান। বুলিয়ান বীজগণিতের গাণিতিক সম্মেলনটি 0 falseএবং 1 এর জন্য 1 ব্যবহার করা হয় true, সুতরাং সেই সম্মেলনটি অনুসরণ করা বোধগম্য। আমি মনে করি এই উপায়টি স্বজ্ঞাতভাবে আরও বোধগম্য করে।

  2. তুলনা ফলাফল। এই তিনটি মান আছে <, =এবং >(যে বিজ্ঞপ্তি তাদের কেউ হয় true)। তাদের জন্য যথাক্রমে -1, 0 এবং 1 এর মানগুলি ব্যবহার করা বোধগম্য হয় (বা আরও সাধারণভাবে একটি নেতিবাচক মান, শূন্য এবং একটি ধনাত্মক মান)।

    আপনি যদি সাম্যের জন্য যাচাই করতে চান এবং আপনার কেবল একটি ফাংশন রয়েছে যা সাধারণ তুলনা করে তবে আমার মনে হয় আপনার মতো কিছু ব্যবহার করে এটি সুস্পষ্ট করা উচিত strcmp(str1, str2) == 0। আমি !এই পরিস্থিতিতে বিভ্রান্তিমূলক বলে মনে করি, কারণ এটি একটি নন-বুলিয়ান মানকে এমনভাবে আচরণ করে যেন এটি একটি বুলিয়ান।

    এছাড়াও, মনে রাখবেন যে তুলনা এবং সমতা একই জিনিস হতে হবে না। উদাহরণস্বরূপ, যদি আপনি জন্ম তাদের তারিখ অনুসারে মানুষ অর্ডার, Compare(me, myTwin)ফেরত পাঠাবেন 0কিন্তু Equals(me, myTwin)ফেরত পাঠাবেন false

  3. কোনও কার্যক্রমে সাফল্য বা ব্যর্থতা, সম্ভবত সেই সাফল্য বা ব্যর্থতার বিবরণ সহ details যদি আপনি উইন্ডোজ সম্পর্কে কথা বলছেন, তবে এই ধরণের কল করা হয় HRESULTএবং একটি অ-শূন্য মান অবশ্যই ব্যর্থতা নির্দেশ করে না। আসলে, একটি নেতিবাচক মান ব্যর্থতা এবং অ-নেতিবাচক সাফল্য নির্দেশ করে। সাফল্যের মানটি প্রায়শই হয় S_OK = 0তবে এটি উদাহরণস্বরূপ S_FALSE = 1বা অন্যান্য মানও হতে পারে ।

বিভ্রান্তিটি এ থেকে আসে যে তিনটি যৌক্তিকভাবে একেবারে পৃথক ডেটা ধরণের ঘটনাটি সি এবং কিছু অন্যান্য ভাষায় একটি একক ডেটা টাইপ (একটি পূর্ণসংখ্যা) হিসাবে উপস্থাপিত হয় এবং আপনি কোনও অবস্থায় পূর্ণসংখ্যা ব্যবহার করতে পারেন। তবে আমি মনে করি না যে পরিস্থিতিতে কিছু নন-বুলিয়ান প্রকারকে সহজতর করে তুলতে বুলিয়ান পুনরায় সংজ্ঞায়িত করা বোধগম্য হবে।

এছাড়াও, সি তে একটি শর্তে প্রায়শই ব্যবহৃত হয় এমন অন্য ধরণের বিষয়টি বিবেচনা করুন: একটি পয়েন্টার। সেখানে, কোনও- NULLপয়েন্টার (যা প্রতিনিধিত্ব করা হয় 0) হিসাবে চিকিত্সা করা স্বাভাবিক false। সুতরাং আপনার পরামর্শ অনুসরণ করে পয়েন্টার সঙ্গে কাজ আরও কঠিন করে তোলে। (যদিও ব্যক্তিগতভাবে আমি পয়েন্টারগুলিকে NULLবুলিয়ান হিসাবে বিবেচনা না করে স্পষ্ট করে তুলনা করতে পছন্দ করি ))


4

জিরো মিথ্যা হতে পারে কারণ বেশিরভাগ সিপিইউতে একটি জিরো পতাকা থাকে যা শাখায় ব্যবহৃত হতে পারে। এটি একটি তুলনা অপারেশন সংরক্ষণ করে।

আসুন দেখি কেন।

কিছু psuedocode, শ্রোতা সম্ভবত সমাবেশ পড়া না

সি- উত্স সরল লুপটি উইবলকে 10 বার কল করে

for (int foo =10; foo>0; foo-- ) /* down count loop is shorter */
{  
   wibble();
}

কেউ কেউ এর জন্য সমাবেশের ভান করে

0x1000 ld a 0x0a      'foo=10
0x1002 call 0x1234    'call wibble()
0x1005 dec a          'foo--
0x1006 jrnz -0x06      'jump back to 0x1000 if not zero
0x1008  

সি- উত্সটি অন্য একটি সহজ লুপটি 10 ​​বার উইবলকে কল করে

for (int foo =0; foo<10; foo-- ) /* up count loop is longer  */
{  
   wibble();
}

কেউ কেউ এই মামলার জন্য সমাবেশের ভান করে

0x1000 ld a 0x00      'foo=0
0x1002 call 0x1234    'call wibble()
0x1005 dec a          'foo--
0x1006 cmp 0x0a       'compare foo to 10 ( like a subtract but we throw the result away)
0x1008 jrns -0x08      'jump back to 0x1000 if compare was negative
0x100a  

আরও কিছু সি উত্স

int foo=10;
if ( foo ) wibble()

এবং সমাবেশ

0x1000 ld a 0x10
0x1002 jz 0x3
0x1004 call 0x1234
0x1007  

কিভাবে সংক্ষিপ্ত তা দেখুন?

আরও কিছু সি উত্স

int foo=10;
if ( foo==0 ) wibble()

এবং সমাবেশ (একটি তুলনামূলকভাবে == 0 প্রতিস্থাপন করতে পারে যে একটি প্রান্তিক স্মার্ট সংকলক অনুমান করা যাক)

0x1000 ld a 0x10
0x1002 jz 0x3
0x1004 call 0x1234
0x1007  

এখন আসল = 1 এর একটি সম্মেলন চেষ্টা করে দেখি

আরও কিছু সি উত্স # ডিফাইন সত্য 1 ইন্ট foo = সত্য; যদি (foo == সত্য) উইবল ()

এবং সমাবেশ

0x1000 ld a 0x1
0x1002 cmp a 0x01
0x1004 jz 0x3
0x1006 call 0x1234
0x1009 

নঞ্জেরো নিয়ে ঘটনাটি কত সংক্ষিপ্ত?

সত্যই প্রথম দিকে সিপিইউতে অ্যাকুমুলেটারের সাথে ছোট ছোট পতাকা সংযুক্ত ছিল।

A> b বা a = b সাধারণত তুলনা নির্দেশিকা গ্রহণ করে কিনা তা পরীক্ষা করতে।

  • যদি না হয় বি জিরো হয় - তবে সেক্ষেত্রে জিরো পতাকাটি একটি সাধারণ লজিক্যাল এনওআর হিসাবে রূপান্তরিত হয় বা একুমুলেটরের সমস্ত বিট হিসাবে প্রয়োগ করা হয়।
  • অথবা এমন নেগেটিভ যেখানে আপনি "দু'য়ের পরিপূরক গাণিতিক ব্যবহার করছেন যদি" ​​সাইন বিট "অর্থাৎ একুমুলেটের সর্বাধিক উল্লেখযোগ্য বিট ব্যবহার করেন। (বেশিরভাগ ক্ষেত্রে আমরা করি)

এটি আবার পুনরায় চালু করা যাক। কিছু পুরানো সিপিইউতে আপনাকে জিরোর সমান সংযোজক বা শূন্যের চেয়ে কম সঞ্চয়ের জন্য তুলনা নির্দেশিকা ব্যবহার করতে হবে না।

এখন আপনি দেখতে পাচ্ছেন কেন শূন্যটি মিথ্যা হতে পারে?

অনুগ্রহ করে নোট করুন এটি psuedo-কোড এবং কোনও বাস্তব নির্দেশ সেটটি এর মতো দেখতে লাগে না। যদি আপনি সমাবেশ জানেন তবে আপনি জানেন যে আমি এখানে জিনিসগুলি খুব সহজ করছি। আপনি যদি সংকলক ডিজাইন সম্পর্কে কিছু জানেন তবে আপনার এই উত্তরটি পড়ার দরকার নেই। যে কেউ লুপ আন্রোলিং বা শাখার পূর্বাভাস সম্পর্কে কিছু জানে, উন্নত শ্রেণি হল 203 এর ঘরে নীচে।


2
আপনার বক্তব্যটি এখানে ভালভাবে তৈরি করা হয়নি কারণ একটি জিনিসের জন্য if (foo)এবং if (foo != 0)একই কোড উত্পন্ন করা উচিত এবং দ্বিতীয়ত, আপনি দেখিয়ে দিচ্ছেন যে আপনি যে সমাবেশের ভাষা ব্যবহার করছেন বাস্তবে তাদের জন্য বুলিয়ান অপারেশন এবং পরীক্ষা রয়েছে। উদাহরণস্বরূপ jzমানে jump if zero। অন্য কথায় if (a == 0) goto target;। এবং পরিমাণ এমনকি সরাসরি পরীক্ষা করা হচ্ছে না; শর্তটি এটির একটি বুলিয়ান পতাকা রূপান্তরিত হয় যা একটি বিশেষ মেশিনের শব্দে সঞ্চিত থাকে। এটি প্রকৃতপক্ষে আরও বেশিcpu.flags.zero = (a == 0); if (cpu.flags.zero) goto target;
কাজ

না কাজ, পুরানো সিপিইউ এর মতো কাজ করে নি। তুলনামূলক নির্দেশনা না দিয়েই জাজ / জেএনজে পারফর্ম করা যায়। যা সত্যিই আমার পুরো পোস্টের পয়েন্ট ছিল।
টিম উইলিসক্রফ্ট

2
আমি তুলনা নির্দেশাবলী সম্পর্কে কিছুই লিখিনি।
কাজ

আপনি কি এমন কোনও প্রসেসরের উদ্ধৃতি দিতে পারেন যার jzনির্দেশ রয়েছে তবে নেই jnz? (বা শর্তসাপেক্ষ নির্দেশের অন্য কোনও অসমিত সেট)
টবি স্পিড

3

অনেকগুলি উত্তর রয়েছে যেগুলি বোঝায় যে 1 এবং সত্যের মধ্যে চিঠিপত্রের কিছু গাণিতিক সম্পত্তি দ্বারা প্রয়োজনীয়। আমি এরকম কোনও সম্পত্তি খুঁজে পাচ্ছি না এবং এটি নিখুঁত historicalতিহাসিক সম্মেলনের পরামর্শ দিচ্ছি।

দুটি উপাদান সহ একটি ক্ষেত্র দেওয়া, আমাদের দুটি অপারেশন রয়েছে: সংযোজন এবং গুণ। আমরা এই ক্ষেত্রটিতে বুলিয়ান অপারেশনগুলিকে দুটি উপায়ে মানচিত্র করতে পারি:

Ditionতিহ্যগতভাবে, আমরা 1 দিয়ে সত্য এবং 0 দিয়ে মিথ্যা চিহ্নিত করি We এইভাবে সংযোজনটি সংযোজন করছে OR

যাইহোক, আমরা ঠিক সহজে 0 দিয়ে সত্য এবং 1 দিয়ে মিথ্যাটিকে সনাক্ত করতে পারি Then তারপরে আমরা OR এর সাথে * এবং XNOR + এর সাথে চিহ্নিত করি। সুতরাং এবং সংযোজন সংযোজন হয়।


4
আপনি যদি উইকিপিডিয়ায় লিঙ্কটি অনুসরণ করে থাকেন তবে আপনি দেখতে পেতেন যে বুলিয়ান বীজগণিতের ধারণাটি দুটি উপাদানের ( en.wikedia.org/wiki/GF%282%29 ) গ্যালোয়াস ক্ষেত্রের সাথে সম্পর্কিত । 0 এবং 1 চিহ্নগুলি যথাক্রমে সংযোজনীয় এবং গুণগত পরিচয়গুলি চিহ্নিত করতে ব্যবহৃত হয়, কারণ আসল সংখ্যাগুলি এমন একটি ক্ষেত্রও যার পরিচয় 0 এবং 1 হয়
জর্জিও

1
@ নীলজি আমার মনে হয় জর্জিও এটা বলতে চেয়েছে যে এটি কেবল একটি সম্মেলনের চেয়ে বেশি নয়। বুলিয়ান বীজগণিতের 0 এবং 1 মূলত জিএফ (2) এর মধ্যে 0 এবং 1 এর সমান, যা সংখ্যার সাথে সংখ্যার সাথে যোগ এবং গুণনের ক্ষেত্রে প্রকৃত সংখ্যায় প্রায় 0 এবং 1 এর মতো আচরণ করে।
এসভিক

1
@ এসভিক: না, কারণ আপনি কেবল ও ও এবং এআর এর গুণক এবং স্যাটারুটিং সংযোজনটির নাম পরিবর্তন করতে পারেন এবং তারপরে লেবেলগুলি ফ্লিপ করতে পারেন যাতে 0 টি সত্য এবং 1 টি মিথ্যা। জর্জিও বলছেন যে এটি বুলিয়ান লজিকের একটি সম্মেলন ছিল, এটি কম্পিউটার বিজ্ঞানের একটি সম্মেলন হিসাবে গৃহীত হয়েছিল।
নীল জি

1
@ নীল জি: না, আপনি + এবং * এবং 0 এবং 1 টি ফ্লিপ করতে পারবেন না কারণ কোনও ক্ষেত্রের জন্য অতিরিক্ত গুণকের বন্টন প্রয়োজন (দেখুন এন.ইউইকিপিডিয়া / উইকি / ফিল্ড_০২০২০ গণিত ৯০৯ ), তবে যদি আপনি +: = এবং সেট করেন এবং *: = এক্সওর, আপনি টি এক্সওর (টি এবং এফ) = টি এক্সওর এফ = টি পেয়েছেন, যেখানে (টি এক্সওর টি) এবং (টি এক্সওর এফ) = এফ এবং টি = এফ। সুতরাং অপারেশনগুলি এবং আপনার পরিচয়গুলি ফ্লিপ করে আর কোনও ক্ষেত্র নেই। সুতরাং আইএমও 0 এবং 1 কে একটি উপযুক্ত ক্ষেত্রের পরিচয় হিসাবে সংজ্ঞায়িত করছে বলে মনে হয় মিথ্যা এবং সত্যকে বেশ বিশ্বস্ততার সাথে ক্যাপচার করেছে।
জর্জিও

1
@ জিওরজিও: আমি কী সম্পাদিত হচ্ছে তা সুস্পষ্ট করার জন্য উত্তরটি সম্পাদনা করেছি।
নীল জি

3

আশ্চর্যের বিষয় হল, শূন্য সবসময় মিথ্যা হয় না।

বিশেষত, ইউনিক্স এবং পিক্সিক কনভেনশনটি EXIT_SUCCESS0 (এবং EXIT_FAILURE1 হিসাবে) হিসাবে সংজ্ঞায়িত করা হয় । আসলে এটি এমনকি একটি স্ট্যান্ডার্ড সি কনভেনশন !

সুতরাং পিক্সিক শেল এবং প্রস্থান (2) সিস্কলগুলির জন্য 0 এর অর্থ "সফল" যা স্বজ্ঞাতভাবে মিথ্যের চেয়ে সত্য।

বিশেষত, শেলগুলি তার "তত্কালীন" শাখা অনুসরণ ifকরতে একটি প্রক্রিয়া ফেরত চায় EXIT_SUCCESS(যা 0)!

স্কিমে (তবে কমন লিস্পে বা মেল্টে নয় ) 0 এবং শূন্য (যেমন ()স্কিমে) সত্য, কারণ একমাত্র ভুয়া মান#f

আমি রাজি, আমি নিটপিক করছি!


3

সি হার্ডওয়ারের কাছাকাছি নিম্ন-স্তরের প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়, এমন একটি অঞ্চল যেখানে আপনাকে মাঝে মাঝে একই ডেটাতে বিটওয়াইজ এবং লজিকাল অপারেশনগুলির মধ্যে স্থানান্তর করতে হয়। সবেমাত্র একটি পরীক্ষা চালানোর জন্য বুলিয়ানতে একটি সংখ্যাসূচক ভাবটি রূপান্তরিত করা কোডটি বিশৃঙ্খলা করবে।

আপনি এই জাতীয় জিনিস লিখতে পারেন:

if (modemctrl & MCTRL_CD) {
   /* carrier detect is on */
}

বরং

if ((modemctrl & MCTRL_CD) != 0) {
    /* carrier detect is on */
}

একটি বিচ্ছিন্ন উদাহরণে এটি এতটা খারাপ নয়, তবে এটি করা অস্বাভাবিক হয়ে যাবে।

তেমনি, কনভার্স অপারেশন। এটি তুলনা করার মতো একটি বুলিয়ান অপারেশনের ফলাফলের জন্য মাত্র একটি 0 বা 1 উত্পাদনের জন্য দরকারী: ধরুন আমরা modemctrlক্যারিয়ার বিট পেয়েছি কিনা তার উপর ভিত্তি করে কিছু শব্দের তৃতীয় বিট সেট করতে চাই :

flags |= ((modemctrl & MCTRL_CD) != 0) << 2;

এখানে আমাদের != 0দ্বিপাক্ষিক &প্রকাশের ফলাফলকে হ্রাস করতে 0বা করতে হবে 1, তবে ফলাফলটি কেবল একটি পূর্ণসংখ্যা হিসাবে, বুলিয়ানকে আরও পূর্ণসংখ্যায় রূপান্তর করতে কিছু বিরক্তিকর নিক্ষেপ করা থেকে আমরা রেহাই পেলাম ।

যদিও আধুনিক সি এখন একটি boolটাইপ আছে, এটি এখনও কোডের বৈধতাটি সংরক্ষণ করে, কারণ এটি একটি ভাল জিনিস, এবং পশ্চাদপটে সামঞ্জস্যের সাথে বিশাল বিভাজন যা অন্যথায় ঘটায়।

সি স্লিট যেখানে অন্য এক বিস্ময়কর: ফোর ওয়ে সুইচ হিসাবে দুটি বুলিয়ান শর্ত পরীক্ষা করে:

switch (foo << 1 | bar) {  /* foo and bar booleans are 0 or 1 */
case 0: /* !foo && !bar */
   break;
case 1: /* !foo && bar */
   break;
case 2: /* foo && !bar */
   break;
case 3: /* foo && bar */
   break;
}

আপনি কোনও লড়াই ছাড়াই এটি সি প্রোগ্রামার থেকে সরিয়ে নিতে পারবেন না!

সবশেষে, সি মাঝে মাঝে এক ধরণের উচ্চ স্তরের সমাবেশের ভাষা হিসাবে কাজ করে। অ্যাসেম্বলি ভাষায়, আমাদের কাছে বুলিয়ান প্রকারও নেই। একটি বুলিয়ান মান একটি মেমরির অবস্থান বা নিবন্ধনে একটি বিট বা একটি শূন্য বনাম নানজারো মানের তুলনায়। একটি পূর্ণসংখ্যা শূন্য, বুলিয়ান শূন্য এবং ঠিকানা শূন্য সমস্তই অ্যাসেম্বলি ভাষা নির্দেশের সেটগুলিতে একইভাবে পরীক্ষা করা হয় (এবং সম্ভবত ভাসমান পয়েন্ট শূন্যও)। সি এবং অ্যাসেম্বলি ভাষার মধ্যে সংঘবদ্ধতা দরকারী, উদাহরণস্বরূপ যখন সি অন্য ভাষা সংকলনের জন্য লক্ষ্য ভাষা হিসাবে ব্যবহৃত হয় (এমনও একটি ভাষা যা বুলিয়ান দৃ strongly়ভাবে টাইপ করে!)


0

বুলিয়ান বা সত্যের মানটির 2 টি মান থাকে। সত্য এবং মিথ্যা.

এগুলি পূর্ণসংখ্যার হিসাবে উপস্থাপন করা উচিত নয় , তবে বিট হিসাবে (0 এবং 1)।

0 বা 1 এর পাশে অন্য কোনও পূর্ণসংখ্যা বলা মিথ্যা নয় conf সত্যের টেবিলগুলি পূর্ণসংখ্যার সাথে নয়, সত্যের মানগুলির সাথে সম্পর্কিত হয়।

কোনও সত্যের মূল্য প্রত্যাশা থেকে, -1 বা 2 সমস্ত সত্যের টেবিল এবং তাদের সাথে সংযুক্ত কোনও বুলিয়ান যুক্তি ভাঙবে।

  • 0 এবং -1 == ?!
  • 0 বা 2 == ?!

বেশিরভাগ ভাষায় সাধারণত একটি booleanটাইপ থাকে যা সংখ্যার মতো যেমন পূর্ণসংখ্যায় ফেলে দেওয়া হয় তখন 0 এর পূর্ণসংখ্যার মান হিসাবে কাস্ট করা মিথ্যা প্রকাশ করে।


1
0 এবং -1 == আপনি যে পরিমাণ বুলিয়ান মান cast আমার প্রশ্নটি এটাই, কেন TRUEবা তাদের কাছে ingালাই FALSE। আমি কখনই বলিনি - সম্ভবত আমি করেছি, তবে এটির উদ্দেশ্য ছিল না - পূর্ণসংখ্যাগুলি সত্য বা মিথ্যা ছিল, আমি বুলেয়েনের জন্য কাস্টিংয়ের সময় কেন তারা মূল্যায়ন করার বিষয়ে জিজ্ঞাসা করেছি।
মরওয়েন

-6

শেষ পর্যন্ত, আপনি মূল ভাষাটি ভাঙ্গার বিষয়ে কথা বলছেন কারণ কিছু এপিআই কৃপণ। ক্রেপি এপিআই নতুন নয়, ভাষা ভেঙে আপনি এগুলি ঠিক করতে পারবেন না। এটি গাণিতিক সত্য যে 0 টি মিথ্যা এবং 1 টি সত্য এবং যে কোনও ভাষা এটিকে সম্মান করে না এটি মূলত ভেঙে গেছে। ত্রি-মুখী তুলনাটি কুলুঙ্গি এবং এর ফলস্বরূপ কোনও ব্যবসায় নেই boolকারণ এটি তিনটি সম্ভাব্য ফলাফল দেয়। পুরানো সি এপিআইগুলিতে কেবল ভয়াবহ ত্রুটি পরিচালনা করা রয়েছে, এবং এটি হ্যামস্ট্রংও রয়েছে কারণ ভয়ঙ্কর ইন্টারফেস না রাখার জন্য প্রয়োজনীয় ভাষা বৈশিষ্ট্য সিতে নেই।

নোট করুন যে আমি যে ভাষাগুলির অন্তর্নিহিত পূর্ণসংখ্যা-> বুলিয়ান রূপান্তর নেই তাদের জন্য বলছি না।


11
"এটি গাণিতিক সত্য যে 0 টি মিথ্যা এবং 1 টি সত্য" এরম।
আর মার্টিনহো ফার্নান্দেস

11
আপনার "গাণিতিক সত্য যে 0 টি মিথ্যা এবং 1 সত্য" এর জন্য আপনি একটি উল্লেখ উল্লেখ করতে পারেন? আপনার উত্তরটি বেদনার মতো বিপজ্জনকভাবে শোনাচ্ছে।
ড্যান পিচেলম্যান

14
এটি গাণিতিক সত্য নয়, তবে উনিশ শতক থেকে এটি একটি গাণিতিক সম্মেলন।
চার্লস ই। গ্রান্ট

1
বুলিয়ান বীজগণিত একটি সীমাবদ্ধ ক্ষেত্র দ্বারা প্রতিনিধিত্ব করা হয় যেখানে 0 এবং 1 অপারেশন এবং গুণনের অনুরূপ ক্রিয়াকলাপগুলির জন্য পরিচয় উপাদান। এই ক্রিয়াকলাপগুলি যথাক্রমে, ও এবং এবং AND প্রকৃতপক্ষে, বুলিয়ান বীজগণিত অনেকটা স্বাভাবিক বীজগণিতের মতোই লেখা হয় যেখানে সংক্ষিপ্ত অবস্থান ও সংকেতকে বোঝায় +। উদাহরণস্বরূপ abc + a'b'cমানে (a and b and c) or (a and (not b) and (not c))
কাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.