گزارههای منطقی نظیر مقایسه کردن دو عدد یا بررسی کردن دو شرط، چیزی است که در زبانهای مختلف برنامهنویسی و حتی در نوشتن اسکریپتهای نسبتاً ساده کاربرد دارد. میتوانید صحیح یا غلط بودن چند شرط را با AND و OR و NOT و نیز NAND و NOR و XNOR و XOR را مقایسه کنید و کاری کنید که در صورت اتفاق افتادن حالتی خاص، دستور یا فرآیندی انجام شود.
در این مقاله نگاهی به منطق گزارههای شرطی و انواع ارتباط بین شرایط و همینطور گیت منطقی میپردازیم. با ما باشید.
گیت منطقی یا Logic Gate چیست؟
در دنیای الکترونیک، دروازهی منطقی یا گیت منطقی و به زبان دیگر، Logic Gate کاربرد فراوانی دارد. منظور از گیت منطقی، قطعهای مثل ترانزیستور یا ترکیبی از قطعات است که یک یا دو ورودی منطقی به شکل سیگنال میگیرد و عملیات خاصی انجام داده و نتیجه را به شکل سیگنالی تولید میکند.
شاید میپرسید در دنیای الکترونیک چه نیازی به گیت منطقی است و آیا فقط انسان نیست که بر اساس گزارههای منطقی تصمیم میگیرد که چه کاری انجام دهد؟ در حقیقت در نرمافزارها و بازیها هم بخش مهمی از محاسبات، محاسبات مربوط به گزارههای منطقی است. به عنوان مثال اگر کاربر پاسخ یک سوال را درست بدهد، نمره ۱ و اگر اشتباه پاسخ دهد یا پاسخی ارایه نکند، نمره ۰ است. گیت منطقی سیگنال مربوط به پاسخ کاربر را با حالت صحیح قیاس میکند و خروجی آن سیگنالی است که در واقع نمرهی کاربر محسوب میشود.
بیشتر اوقات از گیتهای منطقی AND و OR و گاهی از NAND و NOR استفاده میکنیم ولیکن حالتهای دیگری نیز کاربرد دارد. همهی گیتهایی که در ادامه معرفی میکنیم، دو ورودی دارند به جز گیت NOT که فقط یک ورودی دارد. در ادامه گیتهای منطقی را معرفی و بررسی میکنیم.
OR
OR به معنی یا است و گیت OR در صورت صحیح بودن اولین یا دومین ورودی و همینطور در صورت درست بودن هر دو ورودی، خروجی صحیح ارایه میکند. به عبارت دیگر زمانی که لااقل یکی از ورودیها صحیح باشد، خروجی صحیح است و اگر هر دو غلط باشند، خروجی غلط است.
فلوچارت گیت OR به صورت زیر است و فقط در حالتی که هر دو ورودی 0 است، خروجی 0 میشود.
0 + 0 => 0
0 + 1 => 1
1 + 0 => 1
1 + 1 => 1
دقت کنید که منظور از 0 میتواند سیگنال 0 ولت و همینطور غلط بودن یک گزاره باشد و منظور از 1، سیگنالی به جز 0 و یا گزارهای صحیح است.
این نکته را هم مد نظر داشته باشید که گاهی در مکالمات روزمره، زمانی که عبارتی نظیر این یا آن را میشنویم، تصور میکنیم که فقط این یا آن و حالتی که هم این و هم آن صحیح باشد را جزو حالتهای صحیح در نظر نمیگیریم. در واقع دریافت ما از عبارت این یا آن، این OR آن نیست بلکه یک گیت منطقی دیگر که در ادامه معرفی میکنیم را به جای OR در نظر میگیریم که البته صحیح نیست.
AND
AND به معنی و است و زمانی گیت AND خروجی صحیح ارایه میکند که هر دو ورودی آن صحیح باشد. حتی اگر یکی از ورودیها غلط باشد، نتیجه غلط می شود. به عبارت دیگر فلوچارت این گیت به صورت زیر است:
0 + 0 => 0
0 + 1 => 0
1 + 0 => 0
1 + 1 => 1
AND هم مثل OR در برنامهنویسی بسیار پرکاربرد است.
XOR
گیت XOR گاهی EOR و گاهی EXOR گفته میشود و معنای آن، OR انحصاری است. به عبارت دیگر یک "فقط" به گیت OR اضافه میشود و XOR ساخته می شود. بنابراین خروجی این گیت زمانی 1 است که فقط یکی از ورودیهای آن 1 باشد و نه هر دو ورودی.
0 + 0 => 0
0 + 1 => 1
1 + 0 => 1
1 + 1 => 0
همانطور که در توضیح OR اشاره کردیم، گاهی در مکالمات روزمره دریافت اشتباه از گیت OR داریم و آن را XOR تفسیر میکنیم.
NOR
گیت پرکاربرد بعدی، گیت NOR است که ترکیبی از NOT و OR است. به عبارت دیگر زمانی که هم ورودی اول 0 است و هم ورودی دوم 0 است، خروجی این گیت 1 میشود و زمانی که لااقل یکی از ورودیها 1 باشد، خروجی این گیت 0 میشود. با گیت OR مقایسه کنید که زمانی که لااقل یکی از ورودیها 1 بود، خروجی آن 0 میشد.
فلوچارت گیت NOR به صورت زیر است:
0 + 0 => 1
0 + 1 => 0
1 + 0 => 0
1 + 1 => 0
NAND
گیت NAND هم مثل NOR ترکیبی محسوب میشود و در واقع ترکیبی از NOT و AND است. بنابراین اگر هر دو ورودی صحیح یا 1 باشد، حاصل غلط یا 0 است. در سایر حالتها خروجی صحیح یا 1 میشود. با گیت AND مقایسه کنید که در صورت صحیح بودن هر دو ورودی، خروجی 1 میشد و در سایر حالتها خروجی 0 بود. این گیت درست برعکس AND عمل میکند.
0 + 0 => 1
0 + 1 => 1
1 + 0 => 1
1 + 1 => 0
تصویر زیر تراشهای به اسم SN7400N است که دارای ۴ گیت منطقی و در واقع ۴ گیت NAND است.
زمانی که به پین ۱ و ۲ که در گوشهی چپ و پایین واقع شدهاند، ولتاژ بالا که معادل صحیح یا 1 است، وارد شود، پین ۳ ولتاژ کم یا 0 ولت خواهد داشت و اگر به یکی از پینهای ۱ یا ۲، ولتاژ کم اعمال شود، پین ۳ ولتاژ بالا خواهد داشت که معادل 1 است.
XNOR
گیت پرکاربرد دیگر، XNOR است که ترکیبی از گیتهای OR و NOR و XOR محسوب میشود! به عبارت دیگر یک گیت انحصاری NOT و OR یا گیت انحصاری NOR است. فلوچارت این گیت به این صورت است که اگر یکی از ورودیها 0 و دیگری 1 باشد، خروجی آن 0 است و در صورتی که هر دو ورودی صحیح یا هر دو غلط باشد، خروجی آن 1 میشود.
0 + 0 => 1
0 + 1 => 0
1 + 0 => 0
1 + 1 => 1
NOT
گیت NOT در حقیقت سیگنال ورودی را برعکس میکند. اگر ورودی 1 باشد، خروجی 0 است و برعکس. در مدارهای الکترونیکی نیز اگر ورودی ولتاژ بالا باشد، خروجی ولتاژ پایین یا 0 میشود و برعکس. لذا فلوچارت این گیت بسیار ساده است:
0 => 1
1 => 0
معمولاً گیت NOT در ترکیب با گیتهای دیگر به کار میرود.
گیتهای منطقی در برنامهنویسی
در زبانهای مختلف برنامهنویسی، میتوان گزارههای منطقی نوشت. معمولاً از if استفاده میشود و داخل پرانتز، تعدادی شرط با ارتباطاتی مثل OR و AND و غیره نوشته میشود. البته ممکن است به جای OR از || و به جای AND از && استفاده شود. ظاهر تغییر کرده اما اساس کار استفاده از گیتهای منطقی است که شرح دادیم.
نمونهی زیر گیت NOT را نشان میدهد که با علامت ! نوشته شده است. به عبارت دیگر اگر قبل از یک شرط سادهی ریاضی، ! قرار دهیم، نتیجهی شرط هر چه که باشد، برعکس میشود. اگر ! را قبل از کلمهی TRUE به معنی صحیح قرار دهیم، TRUE به FALSE یا غلط تبدیل میشود.
if [ ! true ]; then echo 'false'; else echo 'true'; fi
کد فوق به این معنی است که اگر مخالف صحیح، صحیح بود، عبارت False چاپ شود و در غیر این صورت عبارت True چاپ میشود. طبعاً مخالف صحیح، صحیح نیست و در نتیجه True در ترمینال چاپ میشود:
گاهی اوقات درک کردن گیتهای منطقی که در یک خط کد نوشته شده، پیچیده میشود و باید آن را با دقت و حوصله، حلاجی کرد. نمونهای که مثال زدیم، یک نمونهی بسیار ساده است ولیکن میتوان چندین گزارهی شرطی را با گیتهای منطقی AND و OR و غیره، مقایسه و بررسی کرد. در این صورت تشخیص خروجی کد، کم و بیش دشوار میشود.
cloudsavvyitسیارهی آیتی