- عملگرهای منطقی در جاوا
- عملگر نفی منطقی!
- AND - & منطقی و همچنین شرطی AND - &&
- OR منطقی عملگر | است و همچنین OR شرطی عملگر || است
- XOR - انحصاری منطقی OR - عملگر ^
- اولویت عملیات منطقی
- عبارات منطقی پیچیده
- عملگرهای بیتی (بیتی).
- عملگرهای بیتی &, | و ^
- کد اضافی
- عملگر نفی بیتی ~
عملیات منطقی در جاوا
عملیات منطقی با استفاده از عملگرهای بولی انجام می شود. توتولوژی را ببخشید، اما اوضاع دقیقاً اینگونه است. عملیات منطقی پایه (در برنامه نویسی و ریاضیات) را می توان برای آرگومان های منطقی (عملوندها) به کار برد، و همچنین می تواند برای تشکیل عبارات پیچیده تر، مشابه عملیات حسابی روی اعداد، استفاده شود. به عنوان مثال عبارت:
(a | b) | (c < 100) & !(true) ^ (q == 5)
یک عبارت منطقی پیچیده با چهار عملوند است: (a | b)
, Where а
and b
are متغیرهای نوع.به boolean
(c < 100)
(true)
(q == 5)
نوبه خود، یک عبارت منطقی ساده (a | b)
نیز از دو آرگومان عملوند تشکیل شده است. عملوند منطقی عبارتی است که می توان گفت درست یا نادرست، درست یا نادرست است . در زبان جاوا، عملوند Boolean عبارتی از نوع boolean
یا Boolean است، برای مثال:
(2 < 1)
- عملوند منطقی، مقدار آن نادرست استtrue
- یک عملوند منطقی که مقدار آن آشکارا درست استboolean a
- همچنین می تواند یک عملوند منطقی باشد، مانند a Booleanint a = 2
- یک عملوند منطقی نیست ، فقط یک متغیر از نوع استint
String a = "true"
همچنین یک عملوند منطقی نیست . این رشته ای است که مقدار متن آن"true"
.
- نفی منطقی که به عنوان وارونگی نیز شناخته می شود
NOT
.!
در جاوا قبل از عملوند با علامت “ ” نشان داده می شود . برای یک عملوند اعمال می شود. - منطقی و ، آن نیز
AND
یک ربط است. با نماد "&
" بین دو عملوندی که به آن اعمال می شود نشان داده می شود. - منطقی و یا در جاوا ، آن نیز - است
OR
، آن نیز تفکیک است. در جاوا با علامت “|
” بین دو عملوند نشان داده می شود. - انحصاری یا ,
XOR
, تفکیک شدید. در جاوا با علامت “^
” بین دو عملوند نشان داده می شود. - در جاوا، عملگرهای منطقی عبارتند از شرطی یا ، که با نشان داده می شود
||
، و همچنین شرطی و -&&
.
==
یک عملگر منطقی در نظر گرفته نمی شود. توجه! در جاوا، عملگرهای منطقی&
و|
همچنین^
به اعداد صحیح اعمال می شود. در این مورد، آنها کمی متفاوت عمل می کنند و عملگرهای منطقی بیتی (یا بیتی) نامیده می شوند. درباره آنها - تا پایان مقاله. بیایید به جدولی با توضیحات مختصری در مورد هر یک از عملگرهای منطقی جاوا نگاه کنیم و در زیر آنها را با جزئیات بیشتر توضیح داده و نمونه کدهایی را ارائه خواهیم کرد.
اپراتور جاوا | نام | تایپ کنید | توضیح کوتاه | مثال |
---|---|---|---|---|
! |
منطقی "نه" (نفی) | یگانه | !x به معنی "x نه" است. اگر عملوند نادرست باشد true را برمی گرداند . اگر عملوند true باشد false را برمی گرداند . |
boolean x = true; سپس // !x == false |
& |
منطقی و ( AND ، ضرب) |
دودویی | اگر هر دو عملوند true باشند true را برمی گرداند . | a = true; b = false; سپس a & b == false |
| |
یا منطقی ( OR ، اضافه) |
دودویی | اگر حداقل یکی از عملوندها درست باشد، true را برمی گرداند . | a = true; b = false; سپس a | b == true |
^ |
انحصاری منطقی OR ( XOR ) |
دودویی | اگر یک و تنها یکی از عملوندها درست باشد، true را برمی گرداند . اگر هر دو عملوند درست یا نادرست باشند، false را برمیگرداند . در اصل، اگر عملوندها متفاوت باشند، مقدار true را برمی گرداند. | a = true; b = false; سپس a ^ b == true |
&& |
شرطی AND (کوتاه منطقی AND) | دودویی | همانند، & اما اگر عملوند سمت چپ false& باشد ، این عملگر بدون بررسی عملوند دوم، false را برمیگرداند. |
|
|| |
OR شرطی (OR منطقی کوتاه) | دودویی | همانند، | اما اگر عملگر سمت چپ true باشد ، عملگر true را بدون بررسی عملوند دوم برمی گرداند. |
عملگر نفی منطقی!
این عملگر unary است، به این معنی که برای یک عبارت یا عملوند بولی منفرد اعمال می شود. درک آن، مانند هر نفی، بسیار ساده است: عملگر به سادگی معنای عبارت را به مخالف خود تغییر می دهد. جدول حقیقت یا نتایج انجام یک عملیات نفی:ارزش a | !آ |
نادرست | درست است، واقعی |
درست است، واقعی | نادرست |
public class Solution {
public static void main(String[] args) {
boolean a = true;
System.out.println(!a); // here our boolean expression reverses its value
System.out.println(!false); // non-false expression, as you might guess, will be equal to... what?
System.out.println(!(2 < 5)); // expression (2 < 5) is true, so its negation is false
}
}
خروجی برنامه به صورت زیر خواهد بود:
false
true
false
AND - & منطقی و همچنین شرطی AND - &&
AND یا ربط منطقی به دو عبارت اعمال می شود و نتیجه آن تنها در صورتی درست خواهد بود که هر دو عملوند درست باشند. یعنی اگر یکی از عملوندهایa
یا falseb
باشد ، بدون توجه به مقدار عملگر دوم، عبارت نادرست خواهد بود . اگر تصور کنید درست عدد 1 و نادرست 0 است، عملگر دقیقاً مانند ضرب معمولی عمل می کند. بنابراین، AND منطقی اغلب "ضرب منطقی" نامیده می شود. و به هر حال، این واقعیت کمک می کند تا به سرعت عملکرد اپراتور را به خاطر بسپارید و آن را با منطقی یا اپراتور اشتباه نگیرید . جدول حقیقت و همچنین نتیجه کار اپراتور استa & b
&
&
|
&
آ | ب | a&b |
درست است، واقعی | درست است، واقعی | درست است، واقعی |
درست است، واقعی | نادرست | نادرست |
نادرست | درست است، واقعی | نادرست |
نادرست | نادرست | نادرست |
public class Solution {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
System.out.println(a & b); // if we multiply true by false, we will definitely get false
System.out.println(a & c); // true to true will be true
System.out.println(false & (2 > 5));
System.out.println((2 < 5) & false);
// regardless of the truthfulness of the expression in brackets, in which case we have to be content with false
}
}
نتیجه برنامه:
false
true
false
false
اپراتور &&
گاهی اوقات "کوتاه و" نامیده می شود. هنگام کار با عملوندهای منطقی همان نتیجه ای را ایجاد می کند که عملگر &
. با این حال، در خود کار او تفاوت وجود دارد. بنابراین، قبلاً متوجه شده اید که اگر a & b
عملوند در عبارت () نادرستa
باشد ، بررسی مقدار عملوند بی معنی است : نتیجه عملیات قطعاً نادرست خواهد بود . بنابراین اگر اساساً به مقدار عملوند دوم نیاز نداریم، با استفاده از آن تعداد محاسبات در برنامه را کاهش می دهیم. اگر همه عملگرهای مثال را با . جایگزین کنیم ، نتیجه دقیقاً یکسان خواهد بود، اما خود برنامه کمی سریعتر اجرا می شود (البته ما متوجه این نمی شویم، زیرا ما در مورد mili-micro صحبت می کنیم ... به طور خلاصه. ، واحدهای بسیار کوچک زمان). b
&&
&
&&
OR منطقی عملگر | است و همچنین OR شرطی عملگر || است
عملگر OR در جاوا با نماد نمایش داده می شود|
. یک OR یا تفکیک منطقی به دو عبارت اعمال میشود و نتیجه آن نادرست خواهد بود اگر و فقط اگر هر دو عملوند نادرست باشند. در اینجا ما تا حدودی همان تصویری را که در مورد اپراتور وجود دارد مشاهده می کنیم &
، اما دقیقاً برعکس. یعنی اگر حداقل یک عملوند درست باشد، بدون در نظر گرفتن مقدار عملگر دوم، بیان a | b
تضمین میشود که درست باشد. اگر &
مانند ضرب منطقی عمل می کند، OR جمع منطقی است، اگر تصور کنید درست 1 و نادرست 0 است. فقط به یاد داشته باشید که جمع منطقی متفاوت از جمع عادی عمل می کند. 1 + 1 در این مورد برابر با 2 نیست، بلکه برابر است با 1 (عدد 2 به سادگی در این سیستم وجود ندارد). گاهی اوقات تفکیک به عنوان حداکثر 0 و 1 درک می شود، و در این مورد، اگر حداقل یک عملوند برابر با 1 ( true ) باشد، دقیقاً درست است . جدول حقیقت OR که به عنوان نتیجه عملگر نیز شناخته می شود |
:
آ | ب | یک | ب |
درست است، واقعی | درست است، واقعی | درست است، واقعی |
درست است، واقعی | نادرست | درست است، واقعی |
نادرست | درست است، واقعی | درست است، واقعی |
نادرست | نادرست | نادرست |
public class Solution {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
System.out.println(!a | b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
System.out.println(a | c);
System.out.println((2 < 5) | false); // expression (2 < 5) is true, which means that for any second operand we get a true result
System.out.println((2 > 5) | true);
}
}
نتیجه:
false
true
true
true
اگر از عملگر OR شرطی استفاده کنیم - ||
به جای |
, دقیقاً همان نتیجه را خواهیم گرفت، اما، مانند مورد شرطی AND ، از نظر اقتصادی عمل می کند: اگر با اولین عملوند برابر true&&
مواجه شویم ، مقدار عملوند دوم بررسی نمی شود، اما بلافاصله نتیجه درست است .
XOR جاوا - منطقی انحصاری OR - اپراتور ^
XOR
، جمع مدول 2، XOR منطقی، تفریق منطقی، تفکیک دقیق، متمم بیتی ... این عملگر ^
در جبر بولی نام های زیادی دارد. نتیجه اعمال این عملگر به دو عملوند در صورت متفاوت بودن عملوندها درست و اگر عملوندها یکسان باشند، نادرست خواهد بود. بنابراین، مقایسه آن با تفریق صفر ( نادرست ) و یک ( درست ) راحت است. جدول حقیقت XOR
که به عنوان نتیجه عملگر نیز شناخته می شود ^
:
بولی الف | بولی ب | a^b |
درست است، واقعی | درست است، واقعی | نادرست |
درست است، واقعی | نادرست | درست است، واقعی |
نادرست | درست است، واقعی | درست است، واقعی |
نادرست | نادرست | نادرست |
public class Solution {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
System.out.println(!a ^ b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
System.out.println(a ^ c);
System.out.println((2 < 5) ^ false);
System.out.println((2 > 5) ^ true);
}
}
نتیجه:
false
false
true
true
اولویت عملیات منطقی
همانطور که در ریاضیات، در برنامه نویسی، عملگرها زمانی که در یک عبارت ظاهر می شوند، ترتیب اجرای خاصی دارند. عملگرهای Unary نسبت به عملگرهای باینری و ضرب (حتی منطقی) نسبت به جمع برتری دارند. ما اپراتورهای منطقی را بالاتر در لیست رتبه بندی کرده ایم که اولویت آنها بیشتر است:!
&
^
|
&&
||
&
و |
) دارای تقدم متفاوت هستند:
public class Solution {
public static void main(String[] args) {
boolean a = true, b = true, c = false;
System.out.println(a | b & c);
}
اگر بخواهیم از چپ به راست پیش برویم، یعنی ابتدا عملگر را اعمال کنیم |
و سپس - &
مقدار false را دریافت می کنیم . اما در واقع، اگر این برنامه را اجرا کنید، مطمئن خواهید بود که خروجی درست خواهد بود ، زیرا عملگر منطقی AND &
اولویت بیشتری نسبت به عملگر منطقی OR دارد |
. برای جلوگیری از سردرگمی، باید به خاطر داشته باشید که چه چیزی &
شبیه ضرب و |
چه چیزی شبیه جمع است. می توانید ترتیب اولویت را تغییر دهید. مثل ریاضی مدرسه فقط از براکت استفاده کنید. بیایید کد مثال خود را کمی تغییر دهیم:
public class Solution {
public static void main(String[] args) {
boolean a = true, b = true, c = false;
System.out.println((a|b)&c);
}
چه خبر؟ ابتدا از جمع منطقی در پرانتز و سپس ضرب استفاده می کنیم. نتیجه نادرست خواهد بود .
عبارات منطقی پیچیده
البته ما می توانیم عبارات بولی و عملگرها را با هم ترکیب کنیم. بیایید عبارت از ابتدای مقاله را به خاطر بسپاریم:(a | b) | (c < 100) & !(true) ^ (q == 5)
حالا خیلی ترسناک به نظر نمی رسد. بیایید برنامه ای بنویسیم که مقدار آن را نمایش دهد و قبلاً مقادیر a
، b
و с
و را تعیین کرده باشد q
. مثالی از محاسبه مقدار یک عبارت بولی پیچیده
public class Solution {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
int c = 25;
int q = 2;
System.out.println((a|b) | (c < 100) & !(true)^(q == 5));
}
}
توجه داشته باشید:متغیر q
ما از نوع است int
، اما این یک عبارت Boolean است، و برابر با falseq == 5
است ، زیرا در بالا با عدد 2 مقداردهی اولیه کردیم. در مورد متغیر نیز همینطور است . این عدد برابر با 25 است، اما (c < 100) یک عبارت بولی برابر با true است . نتیجه این برنامه: q
c
true
عبارات بولی پیچیده را می توان برای آزمایش شرایط بسیار پیچیده و شاخه ای استفاده کرد، اما نباید بیش از حد از آنها استفاده کرد: آنها خواندن کد را دشوار می کنند.
عملگرهای بیتی (بیتی).
در ابتدای مقاله اشاره کردیم که عملگرها&
و |
می ^
توانند در رابطه با انواع عدد صحیح جاوا استفاده شوند. در این مورد آنها عملگرهای بیتی هستند. به آنها بیتی نیز می گویند، زیرا یک رقم یک بیت است و این عملیات به طور خاص با بیت ها کار می کند. البته، آنها تا حدودی متفاوت از عملگرهای منطقی عمل می کنند، و برای درک دقیق چگونگی، باید بدانید که یک سیستم اعداد باینری چیست. اگر چیزی در مورد آن نمی دانید یا کاملاً فراموش کرده اید، پیشنهاد می کنیم ابتدا مقاله جاوا: بیت ها و بایت ها را بخوانید و به دیگران یادآوری کنید که در سیستم اعداد باینری فقط دو رقم وجود دارد - 0 و 1 و همه داده ها. در رایانه دقیقاً با استفاده از صفر و یک های شرطی نشان داده می شود. هر یک از اعدادی که به آنها عادت داریم (اعشاری؛ برای آنها 10 رقم مختلف از 0 تا 9 وجود دارد که هر عددی را با آنها می نویسیم) را می توان در سیستم اعداد باینری نشان داد. شما می توانید یک عدد اعشاری را با استفاده از تقسیم ترتیبی به یک ستون با استفاده از پایه سیستم اعداد (2) به باینری تبدیل کنید. باقی مانده تقسیم در هر مرحله که به ترتیب معکوس نوشته می شود، عدد باینری مورد نظر را به ما می دهد. برای مثال، در اینجا، تبدیل عدد اعشاری 103 به نمایش باینری است:
سیستم اعداد باینری در دوره JavaRush در دوره JavaRush، هنگام مطالعه کوئست MultiThreading (سطح 10، سخنرانی 1) در مورد سیستم اعداد باینری صحبت می کنند؛ پس از سخنرانی چندین کار برای تثبیت وجود دارد. با این حال، این موضوع به هیچ وجه دشوار نیست، و حتی اگر هنوز در این دوره تا این حد پیش نرفتید، احتمالاً آن را متوجه خواهید شد. |
&
جاوا از عملگرهای بیتی نیز استفاده می کند: |
^
~
عملگر نفی بیتی>>
تغییر بیت به راست>>>
تغییر بیتی بدون علامت به راست<<
تغییر بیت به چپ
عملگرهای بیتی &, | و ^
بیایید به مثالی از نحوه عملکرد این اپراتورها نگاه کنیم. فرض کنید دو عدد صحیح داریم:int a = 25;
int b = 112;
ما باید سه عملیات را روی آنها اعمال کنیم و &
نتیجه را روی صفحه نمایش دهیم. این هم کد برنامه: |
^
public class Solution {
public static void main(String[] args) {
int a = 25;
int b = 112;
int res1 = a & b;
int res2 = a | b;
int res3 = a ^ b;
System.out.println("a & b = " + res1);
System.out.println("a | b = " + res2);
System.out.println("a ^ b = " + res3);
}
}
نتیجه برنامه به شرح زیر است:
a & b = 16
a | b = 121
a ^ b = 105
اگر متوجه نشدید که چه اتفاقی می افتد، نتیجه بسیار بسیار مرموز به نظر می رسد. در واقع همه چیز ساده تر از چیزی است که به نظر می رسد. عملگرهای بیتی اعداد عملوند را به شکل باینری خود می بینند. و سپس عملگرهای منطقی یا به ارقام (بیت) مربوطه هر دو عدد را اعمال &
می کنند |
. ^
بنابراین، برای &
آخرین بیت از نمایش دودویی عدد 25 به طور منطقی به آخرین بیت از نمایش دودویی عدد 112، بیت ماقبل آخر با ماقبل آخر، و غیره جمع می شود: همین منطق را می توان در مورد |
و ^
.
تغییر بیت به چپ یا راست
چند عملگر bit shift در جاوا وجود دارد. متداول ترین عملگرهای مورد استفاده<<
عبارتند از و >>
. آنها نمایش دودویی یک عدد را به ترتیب به چپ یا راست، و در صورت جابجایی به راست، با حفظ علامت تغییر می دهند (در زیر توضیح خواهیم داد که حفظ علامت به چه معناست). یک اپراتور شیفت راست دیگر وجود دارد >>>
. همین کار را می کند اما >>
علامت را ذخیره نمی کند. بنابراین، بیایید با استفاده از یک مثال به کار آنها نگاه کنیم. int a = 13
a << 1
تمام بیت های نمایش باینری عدد a را 1 بیت به چپ منتقل می کند. برای ساده تر، اجازه دهید عدد 13 را به صورت باینری به صورت 0000 1101 نشان دهیم. در واقع، این عدد به این صورت است: 00000000 00000000 00000000 00001101، زیرا جاوا int
4 بایت یا 32 بیت را برای اعداد اختصاص می دهد. اما این در مثال نقشی ندارد، بنابراین در این مثال عدد خود را یک بایت در نظر می گیریم. بیت خالی در سمت راست با صفر پر شده است. در نتیجه این عمل عدد 26 را بدست می آوریم. a << 2
تمام بیت های نمایش باینری عدد را a
2 بیت به چپ منتقل می کند و دو بیت خالی در سمت راست با صفر پر می شوند. در نتیجه عدد 52 را بدست می آوریم a << 3
نتیجه 104 می شود... به الگو توجه کنید؟ جابجایی بیتی a
به سمت چپ با n موقعیت مانند ضرب یک عدد a
در 2 به توان n عمل می کند. همین امر در مورد اعداد منفی نیز صدق می کند. این -13 << 3
نتیجه -104 را به دست می دهد. a >> n
نمایش دودویی یک عدد n موقعیت را به سمت راست منتقل می کند. به عنوان مثال، 13 >> 1
عدد 1101 را به عدد 0110 یعنی 6 تبدیل می کند. و 13 >> 2
نتیجه 3 می شود. یعنی در اصل، در اینجا عدد را بر 2 تقسیم می کنیم به توان n که n تعداد جابجایی ها است. به سمت راست، اما با یک اخطار: اگر عدد فرد باشد، در طول این عملیات به نظر می رسد که آخرین بیت عدد را بازنشانی می کنیم. اما با موارد منفی وضعیت تا حدودی متفاوت است. فرض کنید، اگر از برنامه بخواهید عملیاتی را انجام دهد، بررسی کنید که چه چیزی تولید می کند -13 >> 1
. همانطور که فکر می کنید عدد -7 را خواهید دید نه -6. این به دلیل نحوه ذخیره اعداد منفی در جاوا و سایر زبان های برنامه نویسی است. آنها در چیزی که کد مکمل نامیده می شود ذخیره می شوند. در این حالت، مهم ترین رقم (در سمت چپ) به علامت داده می شود. در مورد یک عدد منفی، مهم ترین رقم 1 است.
کد اضافی
بیایید عدد را در نظر بگیریمint a = 13
. اگر در برنامه نمایش باینری آن را با استفاده از دستور در کنسول چاپ کنید System.out.println(Integer.toBinaryString(a));
، 1101 دریافت می کنیم. در واقع، این یک نماد کوتاه است، زیرا شماره نوع int
4 بایت در حافظه اشغال می کند، بنابراین رایانه آن را بیشتر می بیند. مثل این:
00000000 00000000 00000000 00001101
مهم ترین رقم صفر است، یعنی یک عدد مثبت داریم. برای تبدیل به کد اضافی:
-
ما عدد -13 را در اصطلاح "کد مستقیم" می نویسیم. برای انجام این کار، مهم ترین رقم عدد را به 1 تغییر دهید
. نتیجه عمل:10000000 0000000 0000000 00001101
-
بعد، همه بیت ها را معکوس می کنیم (0 را به 1 و 1 را به 0 تغییر می دهیم) به جز بیت علامت. در واقع، ما قبلاً آن را تغییر داده ایم.
نتیجه عمل:11111111 11111111 11111111 11110010
(بله، مراحل 1 و 2 را می توان با هم ترکیب کرد، اما بهتر است به آن فکر کنید)
- 1 را به عدد حاصل اضافه کنید.
نتیجه عمل:11111111 11111111 11111111 11110011
-13 >> 1
. از آنجایی که اپراتور ما >>
علامت را حفظ می کند، در این عملیات تمام بیت های آزاد شده در سمت چپ نه با صفر، بلکه با یک پر می شوند. بنابراین، تغییر شماره
11111111 11111111 11111111 11110011
یک بیت به سمت راست، که به ترتیب بیت های زیر منجر می شود:
11111111 11111111 11111111 11111001
اگر این عدد را به کد مستقیم تبدیل کنیم (یعنی ابتدا 1 را کم کنیم، سپس همه بیت ها را به جز اولی معکوس کنیم) عدد بدست می آید:
10000000 00000000 00000000 00000111
یا -7. اکنون که عملگر شیفت سمت راست حفظ علامت را فهمیدیم، مشخص خواهد شد که چه تفاوتی با عملگر دارد >>>
. a >>> n
- این عملیات یک شیفت بدون علامت است، یعنی نمایش دودویی یک عدد را a
با n بیت به سمت راست تغییر می دهد، اما n بیت خالی در سمت چپ را نه با یک، مانند عملگر >>
، بلکه با صفر پر می کند. بیایید عملیات را انجام دهیم -13 >>> 1
. ما قبلاً عدد را -13
در مکمل دو داریم:
11111111 11111111 11111111 11110011
با جابجایی 1 بیتی به سمت راست و پر کردن بیت آزاد با صفر عدد زیر را بدست می آوریم:
01111111 11111111 11111111 11111001
چه چیزی عدد را در نماد اعشاری می دهد 2147483641
.
عملگر نفی بیتی ~
این عملگر یکنواخت بسیار ساده کار می کند: هر بیت از نمایش باینری یک عدد صحیح را معکوس می کند. بیایید عدد را بگیریم-13
:
11111111 11111111 11111111 11110011
عملیات نفی بیتی ~13
به سادگی مقدار هر بیت را معکوس می کند. در نتیجه دریافت می کنیم:
00000000 00000000 00000000 00001100
یا 12
به صورت اعشاری.
نتیجه گیری مختصر
- همه عملگرهای منطقی برای عبارات بولی اعمال می شوند، یعنی آنهایی که می توان گفت درست یا نادرست هستند .
- Если операторы
&
,|
or^
применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания. - В математической логике операторам
&
и|
соответствуют конъюнкция и дизъюнкция. - Логическое И похоже на умножения 1 (true) и 0 (false).
- Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
- Для побитового отрицания целого числа a используется операция
~a
. - Для логического отрицания булевского выражения a используется операция
!a
. - Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
- Поразрядный сдвиг вправо может сохранять знак (
>>
), а может — не сохранять (>>>
).
GO TO FULL VERSION