JavaRush /Java Blogu /Random-AZ /Java-da məntiqi operatorlar

Java-da məntiqi operatorlar

Qrupda dərc edilmişdir
Java-da məntiqi əməliyyatlar.  Java-da bitvi əməliyyatlar - 1

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 аbtip 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ır
  • true- dəyəri açıq şəkildə doğru olan məntiqi operand
  • boolean a- həm də Boolean a kimi məntiqi operand ola bilər
  • int 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".
Java-da aşağıdakı məntiqi əməliyyatlar mövcuddur:
  • Məntiqi inkar , həmçinin NOTinversiya 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 &&.
Qeyd: riyazi məntiqdə də ekvivalentlik münasibətini, başqa sözlə, bərabərliyi nəzərə alırlar. Lakin Java-da bərabərlik operatoru==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.

JavaRush kursunda məntiqi əməliyyatlar

Məntiqi əməliyyatlardan qaçış yoxdur və JavaRush kursunda şərtlər və boolean məlumat növü ilə birlikdə ilk səviyyələrdən görünürlər. Proqramçılar tədricən riyazi məntiq metodlarından istifadə etməyi öyrənirlər. Məntiqi konstruksiyalarla daha etibarlı manipulyasiyalar üçün müəyyən çeviklik və müəyyən proseslərin başa düşülməsi tələb olunur. Beləliklə, bu əməliyyatlara Multithreading axtarışının sonunda daha ətraflı və tamamilə fərqli səviyyədə yanaşılır, o zaman ki, tələbələrin çoxu artıq birbaşa sintaksis və konstruksiyalar tərəfindən çox yayındırılmır, lakin tapşırığın mahiyyətini araşdırmağa çalışırlar.

Java-da məntiqi əməliyyatlar.  Java-da bitwise əməliyyatları - 2

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
Misal. Məntiqi inkar əməliyyatı
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 . aYə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
Məntiqi VƏ, o da bir bağlayıcıdır, misallar:
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 ayalandı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
Məntiqi OR, həmçinin disjunksiya kimi tanınır, misal:
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 XORoperatorun 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
Misal:
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:
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
Nümunələrə baxaq. Bağlayıcı və disjunksiya ( &|) 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:qbizim dəyişən növüdür int, lakin q == 5bu Boolean ifadəsidir və o, false ilə bərabərdir , çünki yuxarıda biz q2 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: |^Java-da məntiqi əməliyyatlar.  Java-da bitwise əməliyyatları - 3

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
Başlayanlar üçün bit operatorları çox qarışıq və süni görünür. Çox vaxt təhsil problemlərini həll etməkdən başqa nə üçün lazım olduqlarını başa düşmürlər. Əslində, onlar ən azı səmərəli bölmə və vurma təşkil etmək üçün istifadə edilə bilər və peşəkarlar onlardan kodlaşdırma/şifrələmə, şifrələmə və təsadüfi ədədlər yaratmaq üçün istifadə edirlər.

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 Java-da məntiqi əməliyyatlar.  Java-da bitwise əməliyyatları - 4: halda |^. Java-da məntiqi əməliyyatlar.  Java-da bitwise əməliyyatları - 5

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 <<>>. 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 << 1a 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 intrə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. Java-da məntiqi əməliyyatlar.  Java-da bitwise əməliyyatları - 6Sağda boşaldılmış bit sıfırlarla doldurulur. Bu əməliyyat nəticəsində biz 26 rəqəmini alırıq. a << 2O, ədədin ikili təsvirinin bütün bitlərini a2 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 << 3Nəticə 104 olacaq... Nümunəyə diqqət yetirdinizmi? Bit istiqamətində n mövqe ilə sola sürüşdürmə aədədi an-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 >> nn ə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 >> 2Nə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ək int 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 intyaddaş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:
  1. 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
  2. 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)

  3. Əldə edilən nömrəyə 1 əlavə edin.
    Fəaliyyətin nəticəsi:

    
    11111111 11111111 11111111 11110011
Əldə edilən ikili ədəd -13-dür, ikinin tamamlayıcı kodunda yazılmışdır və bit sürüşməsi (və digər əməliyyatlar) ona xüsusi olaraq tətbiq olunacaq. Sadəcə olaraq, əməliyyat məntiqindəki fərq bütün əməliyyatlarda nəzərə çarpmır. Tutaq ki, eyni sola sürüşmə üçün fərq hiss olunmur; mənfi ədədlərlə müsbət ədədlərlə eyni şəkildə işləyə bilərik. İndi sağa keçək -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 an 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. -13Artı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ı ~13sadəcə olaraq hər bitin dəyərini dəyişdirəcək. Nəticədə əldə edirik:

00000000 00000000 00000000 00001100
Və ya 12onluq 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е.
  • Поразрядный сдвиг вправо может сохранять знак (>>), а может — не сохранять (>>>).
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION