- Java-da məntiqi operatorlar
- Məntiqi inkar operatoru!
- Məntiqi VƏ - &, eləcə də şərti VƏ - &&
- Məntiqi OR operatoru |, eləcə də şərti OR operatoru ||
- XOR - məntiqi eksklüziv OR - operator ^
- Məntiqi əməliyyatların prioriteti
- Mürəkkəb məntiqi ifadələr
- Bitwise (bitwise) operatorları
- Bitwise operatorları &, | və ^
- Əlavə kod
- Bitwise inkar operatoru ~
Java-da məntiqi əməliyyatlar
Məntiqi əməliyyatlar Boolean operatorlarından istifadə etməklə həyata keçirilir. Tovtologiyanı bağışlayın, amma işlər tam olaraq belədir. Əsas məntiqi əməliyyatlar (proqramlaşdırma və riyaziyyatda) məntiqi arqumentlərə (operandlara) tətbiq oluna bilər, həmçinin ədədlər üzərində arifmetik əməliyyatlara bənzər daha mürəkkəb ifadələr yaratmaq üçün istifadə edilə bilər. Məsələn, ifadə:
(a | b) | (c < 100) & !(true) ^ (q == 5)
dörd operandlı mürəkkəb məntiqi ifadədir: (a | b)
, burada а
və b
tip dəyişənlərdir.Öz boolean
(c < 100)
(true)
(q == 5)
növbəsində sadə məntiqi ifadə (a | b)
də iki operand arqumentindən ibarətdir. Məntiqi operand, doğru və ya yanlış, doğru və ya yalan olduğu deyilə bilən ifadədir . Java dilində Boolean operand növü və ya Boolean ifadəsidir boolean
, məsələn:
(2 < 1)
— məntiqi operand, onun dəyəri yanlışdırtrue
- dəyəri açıq şəkildə doğru olan məntiqi operandboolean a
- həm də Boolean a kimi məntiqi operand ola bilərint a = 2
- məntiqi operand deyil , sadəcə tipli dəyişəndirint
String a = "true"
həm də məntiqi operand deyil . Bu mətn dəyəri olan sətirdir"true"
.
- Məntiqi inkar , həmçinin
NOT
inversiya kimi tanınır.!
Java-da operanddan əvvəl “ ” simvolu ilə göstərilir . Bir operanda tətbiq edilir. - Məntiqi və , həm də bağlayıcıdır
AND
.&
Tətbiq olunduğu iki operand arasında “ ” simvolu ilə göstərilir . - Məntiqi və ya Java-da o, həm də -
OR
, həm də disjunksiyadır. Java-da iki operand arasında “ ” simvolu ilə göstərilir|
. - Eksklüziv və ya ,
XOR
, ciddi disjunksiya. Java-da iki operand arasında “ ” simvolu ilə göstərilir^
. - Java-da məntiqi operatorlara şərti və ya kimi işarələnən
||
, həmçinin şərti və - daxildir&&
.
==
məntiqi operator hesab edilmir. Diqqət! Java-da məntiqi operatorlar&
vətam ədədlərə də aiddir|
. ^
Bu halda onlar bir qədər fərqli işləyir və bitwise (və ya bitwise) məntiqi operatorlar adlanır. Onlar haqqında - məqalənin sonuna doğru. Java məntiqi operatorlarının hər birinin qısa təsviri ilə cədvələ baxaq və aşağıda biz onları daha ətraflı təsvir edəcəyik və kod nümunələri təqdim edəcəyik.
Java operatoru | ad | Növ | Qısa Təsvir | Misal |
---|---|---|---|---|
! |
Məntiqi “yox” (inkar) | Unary | !x “x deyil” deməkdir. Operand yalan olarsa, true qaytarır . Operand doğrudursa false qaytarır . |
boolean x = true; Sonra // !x == false |
& |
Məntiqi VƏ ( AND , vurma) |
İkili | Hər iki operand doğrudursa , doğru qaytarır . | a = true; b = false; Sonra a & b == false |
| |
Məntiqi OR ( OR , əlavə) |
İkili | Operandlardan ən azı biri doğrudursa , doğru qaytarır . | a = true; b = false; Sonra a | b == true |
^ |
Məntiqi eksklüziv OR ( XOR ) |
İkili | Operandlardan biri və yalnız biri doğrudursa , doğru qaytarır . Hər iki operand doğru və ya yalan olduqda false qaytarır . Operandlar fərqli olarsa , mahiyyət etibarilə doğru qaytarır . | a = true; b = false; Sonra a ^ b == true |
&& |
Şərti AND (qısa məntiqi AND) | İkili | ilə eynidir, & lakin solundakı operand false& olarsa , bu operator ikinci operandı yoxlamadan yalanı qaytarır. |
|
|| |
Şərti OR (qısa məntiqi OR) | İkili | ilə eynidir, | lakin soldakı operator doğrudursa , operator ikinci operandı yoxlamadan doğru qaytarır. |
Məntiqi inkar operatoru!
Bu operator unardır, yəni tək Boolean ifadəsi və ya operandına aiddir. Hər hansı bir inkar kimi onu başa düşmək çox sadədir: operator sadəcə ifadənin mənasını onun əksinə dəyişir. Həqiqət cədvəli və ya inkar əməliyyatının nəticələri:dəyəri a | !a |
yalan | doğru |
doğru | yalan |
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
}
}
Proqramın çıxışı aşağıdakı kimi olacaq:
false
true
false
Məntiqi VƏ - &, eləcə də şərti VƏ - &&
Məntiqi AND və ya birləşmə iki ifadəyə tətbiq edilir və onun nəticəsi yalnız hər iki operand doğru olduqda doğru olacaqdır .a
Yəni və ya operandlarından biri falseb
olarsa , ikinci operatorun dəyərindən asılı olmayaraq ifadə yalan olacaq . Əgər siz təsəvvür edirsinizsə ki, doğru rəqəm 1, yalan isə 0dır, onda operator adi vurma ilə tam eyni işləyir. Buna görə də, məntiqi VƏ çox vaxt “məntiqi vurma” adlanır. Yeri gəlmişkən, bu fakt operatorun işini tez xatırlamağa və onu məntiqi və ya operatorla qarışdırmamağa kömək edir . Həqiqət cədvəli VƏ, həm də operatorun işinin nəticəsidira & b
&
&
|
&
a | b | a&b |
doğru | doğru | doğru |
doğru | yalan | yalan |
yalan | doğru | yalan |
yalan | yalan | yalan |
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
}
}
Proqramın nəticəsi:
false
true
false
false
Operator &&
bəzən “qısa AND” adlanır. Məntiqi operandlarla işləyərkən operator kimi eyni nəticəni verir &
. Bununla belə, onun yaradıcılığında bir fərq var. Beləliklə , siz artıq qeyd etdiniz ki, a & b
( ) ifadəsindəki operand a
yalandırsa , operandın dəyərini yoxlamağın mənası yoxdur : əməliyyatın nəticəsi mütləq yalan olacaq . Beləliklə, ikinci operandın dəyərinə əsaslı ehtiyacımız yoxdursa, ondan istifadə edərək proqramdakı hesablamaların sayını azaldırıq. Nümunədəki bütün operatorları ilə əvəz etsək , nəticə tam olaraq eyni olacaq, lakin proqram özü bir az daha sürətli işləyəcək (baxmayaraq ki, biz bunu hiss etməyəcəyik, çünki söhbət mili-mikrodan gedir... bir sözlə. , çox kiçik zaman vahidləri). b
&&
&
&&
Məntiqi OR operatoru |, eləcə də şərti OR operatoru ||
Java-da OR operatoru simvolu ilə təmsil olunur|
. Məntiqi OR və ya disjunksiya iki ifadəyə tətbiq edilir və onun nəticəsi yalnız və yalnız hər iki operand yalan olduqda yalan olacaqdır . Burada biz müəyyən dərəcədə operatorun vəziyyətində olduğu kimi eyni mənzərəni müşahidə edirik &
, lakin tam əksini. Yəni, ən azı bir operand true olarsa, ikinci operatorun dəyərindən asılı olmayaraq ifadənin doğrua | b
olmasına zəmanət verilir . Əgər məntiqi vurma kimi davranırsa, onda OR məntiqi toplamadır, əgər siz doğrunun 1, yalanın 0 olduğunu təsəvvür edirsinizsə. Sadəcə unutmayın ki, məntiqi toplama adi toplamadan fərqli işləyir. Bu vəziyyətdə 1 + 1 2-yə deyil, 1-ə bərabərdir (2 rəqəmi bu sistemdə sadəcə mövcud deyil). Bəzən disjunksiya 0 və 1-in maksimumu kimi başa düşülür və bu halda ən azı bir operand 1-ə bərabərdirsə ( true ), biz tam olaraq doğru alırıq . OR operatorun nəticəsi kimi də tanınan həqiqət cədvəli : &
|
a | b | a | b |
doğru | doğru | doğru |
doğru | yalan | doğru |
yalan | doğru | doğru |
yalan | yalan | yalan |
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);
}
}
Nəticə:
false
true
true
true
Əgər şərti OR operatorundan istifadə etsək - ||
əvəzinə |
, biz eyni nəticəni alacağıq, lakin şərti AND vəziyyətində olduğu kimi, o, iqtisadi təsir göstərəcək: əgər biz true&&
-a bərabər olan birinci operandla "çalışırıqsa" , dəyəri ikinci operand yoxlanılmır, lakin dərhal nəticə doğrudur .
XOR Java - məntiqi eksklüziv OR - operator ^
XOR
, modul 2 toplama, məntiqi XOR, məntiqi çıxma, ciddi disjunksiya, bitwise tamamlama... operatorun ^
Boolean cəbrində bir çox adı var. Bu operatorun iki operanda tətbiq edilməsinin nəticəsi operandlar fərqli olduqda doğru , eyni olduqda isə yalan olacaq. Buna görə də onu sıfırları ( yalan ) və birləri ( doğru ) çıxarmaqla müqayisə etmək rahatdır . Həqiqət cədvəli XOR
operatorun nəticəsi kimi də tanınır ^
:
Boolean a | Boolean b | a^b |
doğru | doğru | yalan |
doğru | yalan | doğru |
yalan | doğru | doğru |
yalan | yalan | yalan |
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);
}
}
Nəticə:
false
false
true
true
Məntiqi əməliyyatların prioriteti
Riyaziyyatda olduğu kimi, proqramlaşdırmada da operatorlar eyni ifadədə göründükdə xüsusi icra sırasına malikdirlər. Unar operatorların ikili operatorlara, vurma (hətta məntiqi) isə toplama üzərində üstünlükləri var. Məntiqi operatorları siyahıda daha yüksək yerləşdirmişik, onların prioriteti bir o qədər yüksəkdir:!
&
^
|
&&
||
&
və |
) fərqli üstünlüklərə malikdir:
public class Solution {
public static void main(String[] args) {
boolean a = true, b = true, c = false;
System.out.println(a | b & c);
}
Əgər biz soldan sağa işləsəydik, yəni əvvəlcə operatoru tətbiq etsəydik |
, sonra isə - , false&
qiymətini alacaqdıq . Amma əslində, bu proqramı işlətsəniz, nəticənin doğru olacağına əmin olacaqsınız , çünki məntiqi AND operatoru məntiqi OR operatorundan daha yüksək prioritetə sahib olacaqdır . Çaşqınlığın qarşısını almaq üçün yadda saxlamaq lazımdır ki, nəyin vurma kimi, nəyin isə toplama kimi davranır. Prioritet sırasını dəyişə bilərsiniz. Sadəcə məktəb riyaziyyatında olduğu kimi mötərizədə istifadə edin. Nümunə kodumuzu bir az dəyişdirək: &
|
&
|
public class Solution {
public static void main(String[] args) {
boolean a = true, b = true, c = false;
System.out.println((a|b)&c);
}
Nə var nə yox? Əvvəlcə mötərizədə məntiqi toplamadan, sonra isə vurmadan istifadə edirik. Nəticə yalan olacaq .
Mürəkkəb məntiqi ifadələr
Təbii ki, biz Boolean ifadələrini və operatorlarını birləşdirə bilərik. Məqalənin əvvəlindəki ifadəni xatırlayaq:(a | b) | (c < 100) & !(true) ^ (q == 5)
İndi o qədər də qorxulu görünmür. a
Əvvəlcədən , b
, с
və -nin qiymətlərini təyin edərək öz dəyərini göstərən proqram yazaq q
. Kompleks Boolean ifadəsinin dəyərinin hesablanması nümunəsi
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));
}
}
Qeyd:q
bizim dəyişən növüdür int
, lakin q == 5
bu Boolean ifadəsidir və o, false ilə bərabərdir , çünki yuxarıda biz q
2 rəqəmi ilə işə salmışıq. Dəyişən ilə də eynidir c
. Bu ədəd 25-ə bərabərdir, lakin (c < 100) doğruya bərabər olan Boolean ifadəsidir . Bu proqramın nəticəsi:
true
Mürəkkəb Boolean ifadələri çox mürəkkəb və budaqlı şərtləri yoxlamaq üçün istifadə edilə bilər, lakin onlardan çox istifadə edilməməlidir: onlar kodu oxumağı çətinləşdirir.
Bitwise (bitwise) operatorları
Məqalənin əvvəlində qeyd etdik ki, , operatorları və&
Java tam ədəd növləri ilə bağlı istifadə edilə bilər. Bu halda onlar bitvi operatorlardır. Onlar həmçinin bitwise adlanır, çünki bir rəqəm bir bitdir və bu əməliyyatlar xüsusi olaraq bitlərlə işləyir. Əlbəttə ki, onlar məntiqi operatorlardan bir qədər fərqli işləyirlər və necə dəqiq başa düşmək üçün ikili say sisteminin nə olduğunu bilmək lazımdır. Bu barədə heç nə bilmirsinizsə və ya tamamilə unutmusunuzsa, əvvəlcə Java məqaləsini oxumağı təklif edirik: bitlər və baytlar və hər kəsə ikili say sistemində yalnız iki rəqəmin - 0 və 1 və bütün məlumatların olduğunu xatırladırıq. kompüterdə şərti sıfırlar və birlərdən istifadə etməklə dəqiq şəkildə təmsil olunur. Adət etdiyimiz ədədlərdən hər hansı birini (onluq; onlar üçün 0-dan 9-a kimi 10 müxtəlif rəqəm var, onlarla istənilən ədədləri yazırıq) ikilik say sistemində təmsil oluna bilər. Siz say sistemi bazasından (2) istifadə edərək sütuna ardıcıl bölmədən istifadə edərək onluq ədədi ikiliyə çevirə bilərsiniz. Hər addımda tərs qaydada yazılan bölmənin qalıqları bizə istədiyiniz ikili ədədi verəcəkdir. Burada, məsələn, 103 onluq ədədinin ikili təsvirə çevrilməsi: |
^
JavaRush kursunda ikili say sistemi JavaRush kursunda MultiThreading axtarışını öyrənərkən ikili say sistemindən danışırlar (səviyyə 10, mühazirə 1); mühazirədən sonra konsolidasiya üçün bir neçə tapşırıq var. Bununla belə, bu mövzu heç də çətin deyil və hətta kursda o qədər də irəli getməmisinizsə belə, yəqin ki, başa düşəcəksiniz. |
&
, |
və Java ilə yanaşı ^
, bitvi operatorlardan da istifadə edir:
~
bitwise inkar operatoru>>
bit istiqamətində sağa sürüşdürün>>>
işarəsiz bit istiqamətində sağa sürüşdürmə<<
bit istiqamətində sola sürüşdürün
Bitwise operatorları &, | və ^
Bu operatorların necə işlədiyinə dair bir nümunəyə baxaq. Tutaq ki, iki tam ədədimiz var:int a = 25;
int b = 112;
Onlara üç əməliyyat tətbiq etməliyik &
və nəticəni ekranda göstərməliyik. Budur proqram kodu: |
^
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);
}
}
Proqramın nəticəsi aşağıdakı kimidir:
a & b = 16
a | b = 121
a ^ b = 105
Nə baş verdiyini başa düşmürsənsə, nəticə çox, çox sirli görünür. Əslində hər şey göründüyündən daha sadədir. Bitwise operatorları ikili formada operand nömrələrini "görürlər". &
Və sonra məntiqi operatorlar və |
ya ^
hər iki ədədin müvafiq rəqəmlərinə (bitlərinə) müraciət edirlər . Beləliklə, &
25 rəqəminin ikili təsvirinin son biti üçün məntiqi olaraq 112 rəqəminin ikili təsvirinin son bitinə, sondan əvvəlki bitə və s. əlavə olunur : halda |
və ^
.
Bit sola və ya sağa sürüşdürün
Java-da bir neçə bit dəyişdirmə operatoru var. Ən çox istifadə olunan operatorlar<<
və >>
. Onlar nömrənin ikili təsvirini müvafiq olaraq sola və ya sağa, sağa sürüşmə halında isə işarəni qoruyub saxlayır (aşağıda işarənin saxlanmasının nə demək olduğunu izah edəcəyik). Başqa bir sağa sürüşmə operatoru var >>>
. Eyni şeyi edir, lakin >>
işarəni saxlamır. Beləliklə, bir nümunədən istifadə edərək onların işinə baxaq. int a = 13
a << 1
a sayının ikili təsvirinin bütün bitlərini 1 bit sola sürüşdürür. Sadələşdirmək üçün 13 rəqəmini binar formada 0000 1101 kimi təqdim edək. Əslində bu rəqəm belə görünür: 00000000 00000000 00000000 00001101, çünki Java int
rəqəmlər üçün 4 bayt və ya 32 bit ayırır. Bununla belə, bu nümunədə rol oynamır, ona görə də bu nümunədə nömrəmizi bir bayt hesab edəcəyik. Sağda boşaldılmış bit sıfırlarla doldurulur. Bu əməliyyat nəticəsində biz 26 rəqəmini alırıq. a << 2
O, ədədin ikili təsvirinin bütün bitlərini a
2 bit sola sürüşdürür və sağda boşalmış iki bit sıfırla doldurulur. Nəticədə 52 rəqəmini alacağıq. a << 3
Nəticə 104 olacaq... Nümunəyə diqqət yetirdinizmi? Bit istiqamətində n mövqe ilə sola sürüşdürmə a
ədədi a
n-in gücünə 2-yə vurmaq kimi işləyir. Eyni şey mənfi ədədlərə də aiddir. Bu -13 << 3
-104 nəticə verəcəkdir. a >> n
n ədədinin ikili təsvirini sağa sürüşdürür. Məsələn, 13 >> 1
1101 rəqəmini 0110 rəqəminə çevirir, yəni 6. 13 >> 2
Nəticə isə 3 olacaq. Yəni mahiyyət etibarı ilə burada rəqəmi 2-yə n-in gücünə bölürük, burada n yerdəyişmələrin sayıdır. sağa, lakin bir xəbərdarlıqla: əgər nömrə təkdirsə, bu əməliyyat zamanı biz nömrənin son bitini sıfırlamış oluruq. Ancaq mənfi olanlarla vəziyyət bir qədər fərqlidir. Deyək ki, proqramdan bir əməliyyat yerinə yetirməsini xahiş etsəniz, onun nə istehsal edəcəyini yoxlamağa çalışın -13 >> 1
. Siz düşündüyünüz kimi -6 deyil, -7 rəqəmini görəcəksiniz. Bu, Java və digər proqramlaşdırma dillərində mənfi ədədlərin saxlanması ilə əlaqədar baş verir. Onlar tamamlayıcı kod adlanan şeydə saxlanılır. Bu halda işarənin altında ən əhəmiyyətli rəqəm (solda olan) verilir. Mənfi rəqəm olduqda, ən əhəmiyyətli rəqəm 1-dir.
Əlavə kod
Nömrəni nəzərdən keçirəkint a = 13
. Əgər proqramda onun ikili təsvirini komandadan istifadə edərək konsolda çap etsəniz System.out.println(Integer.toBinaryString(a));
, onda biz 1101 alacağıq. Əslində, bu stenoqramdır, çünki tip nömrəsi int
yaddaşda 4 bayt yer tutur, ona görə də kompüter onu daha çox “görür”. bunun kimi:
00000000 00000000 00000000 00001101
Ən əhəmiyyətli rəqəm sıfırdır, yəni müsbət rəqəmimiz var. Əlavə koda çevirmək üçün:
-
Sözdə "birbaşa kod" da -13 rəqəmini yazırıq. Bunu etmək üçün nömrənin ən əhəmiyyətli rəqəmini 1-ə dəyişin
. Fəaliyyətin nəticəsi:10000000 0000000 0000000 00001101
-
Sonra, işarə bitindən başqa bütün bitləri (0-ı 1-ə, 1-i 0-a dəyişdiririk) çeviririk. Əslində biz bunu artıq dəyişmişik.
Tədbirin nəticəsi:11111111 11111111 11111111 11110010
(bəli, 1 və 2-ci addımlar birləşdirilə bilər, lakin bu cür düşünmək daha yaxşıdır)
- Əldə edilən nömrəyə 1 əlavə edin.
Fəaliyyətin nəticəsi:11111111 11111111 11111111 11110011
-13 >> 1
. Operatorumuz >>
işarəni saxladığından, bu əməliyyatda solda boşalmış bütün bitlər sıfırlarla deyil, birlərlə doldurulur. Beləliklə, nömrə dəyişdirilir
11111111 11111111 11111111 11110011
bir bit sağa, nəticədə aşağıdakı bit ardıcıllığı yaranır:
11111111 11111111 11111111 11111001
Bu rəqəmi birbaşa koda çevirsək (yəni əvvəlcə 1-i çıxarın, sonra birincidən başqa bütün bitləri çevirin) rəqəmi alırıq:
10000000 00000000 00000000 00000111
və ya -7. İndi işarəni qoruyan sağa sürüşmə operatorunu başa düşdükdən sonra onun operatordan nə ilə fərqləndiyi aydın olacaq >>>
. a >>> n
— bu əməliyyat işarəsiz yerdəyişmədir, yəni ədədin ikili təsvirini a
n bit ilə sağa sürüşdürür, lakin solda boşalmış n biti operator kimi birlərlə deyil, >>
sıfırlarla doldurur. Əməliyyatı edək -13 >>> 1
. -13
Artıq ikini tamamlayan rəqəmimiz var :
11111111 11111111 11111111 11110011
1 bit sağa keçərək və boş biti sıfırla doldurmaqla aşağıdakı rəqəmi əldə edirik:
01111111 11111111 11111111 11111001
Nömrəni ondalık yazıda verən nədir 2147483641
.
Bitwise inkar operatoru ~
Bu unar operator çox sadə işləyir: o, tam ədədin ikili təsvirinin hər bitini tərsinə çevirir. Nömrəni götürək-13
:
11111111 11111111 11111111 11110011
Bitwise inkar əməliyyatı ~13
sadəcə olaraq hər bitin dəyərini dəyişdirəcək. Nəticədə əldə edirik:
00000000 00000000 00000000 00001100
Və ya 12
onluq formada.
Qısa nəticələr
- Bütün məntiqi operatorlar Boolean ifadələrinə, yəni doğru və ya yalan olduğu deyilə bilənlərə aiddir .
- Если операторы
&
,|
or^
применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания. - В математической логике операторам
&
и|
соответствуют конъюнкция и дизъюнкция. - Логическое И похоже на умножения 1 (true) и 0 (false).
- Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
- Для побитового отрицания целого числа a используется операция
~a
. - Для логического отрицания булевского выражения a используется операция
!a
. - Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
- Поразрядный сдвиг вправо может сохранять знак (
>>
), а может — не сохранять (>>>
).
GO TO FULL VERSION