JavaRush /Java блогы /Random-KK /Java тіліндегі логикалық операторлар

Java тіліндегі логикалық операторлар

Топта жарияланған
Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық операциялар – 1

Java тіліндегі логикалық операциялар

Логикалық операциялар логикалық операторлардың көмегімен орындалады. Тавтологияны кешіріңіз, бірақ жағдай дәл осылай. Негізгі логикалық операцияларды (бағдарламалау мен математикада) логикалық аргументтерге (операндтарға) қолдануға болады, сонымен қатар сандарға арифметикалық амалдар сияқты күрделірек өрнектерді құру үшін де пайдалануға болады. Мысалы, өрнек:

(a | b) | (c < 100) & !(true) ^ (q == 5)
төрт операндтары бар күрделі логикалық өрнек: (a | b), мұндағы ажәне bтипті айнымалылар.Өз boolean (c < 100) (true) (q == 5) кезегінде қарапайым логикалық өрнек (a | b)те екі операнд аргументінен тұрады. Логикалық операнд - бұл шын немесе жалған, ақиқат немесе жалған деп айтуға болатын өрнек . Java тілінде логикалық операнд түр booleanнемесе логикалық өрнек болып табылады, мысалы:
  • (2 < 1)— логикалық операнд, оның мәні жалған
  • true- мәні анық ақиқат болатын логикалық операнд
  • boolean a- логикалық операнд болуы мүмкін, логикалық a сияқты
  • int a = 2- логикалық операнд емес , ол жай түрдегі айнымалыint
  • String a = "true"сонымен қатар логикалық операнд емес . Бұл мәтіндік мәні болатын жол "true".
Java тілінде келесі логикалық операциялар қол жетімді:
  • Логикалық терістеу , инversion деп те белгілі NOT. !Java тілінде ол операнд алдында « » белгісімен белгіленеді . Бір операндқа қолданылады.
  • Логикалық және , ол да ANDжалғаулық. &Ол қолданылатын екі операнд арасында « » белгісімен көрсетіледі .
  • Логикалық немесе Java тілінде ол - OR, сонымен қатар дизъюнкция. |Java тілінде ол екі операнд арасында « » белгісімен белгіленеді .
  • Эксклюзивті немесе , XOR, қатаң дизъюнкция. ^Java тілінде ол екі операнд арасында « » белгісімен белгіленеді .
  • Java тілінде логикалық операторларға шартты немесе деп белгіленетін ||, сондай-ақ шартты және - жатады &&.
Ескерту: сонымен қатар математикалық логикада олар эквиваленттік қатынасты, басқаша айтқанда, теңдікті қарастырады. Алайда Java тілінде теңдік операторы==логикалық оператор болып саналмайды. Назар аударыңыз! Java тілінде логикалық операторлар&,|сонымен^қатар бүтін сандарға қолданылады. Бұл жағдайда олар сәл басқаша жұмыс істейді және разрядтық (немесе разрядтық) логикалық операторлар деп аталады. Олар туралы - мақаланың соңына қарай. Java логикалық операторларының әрқайсысының қысқаша сипаттамасы бар кестені қарастырайық, ал төменде біз оларды толығырақ сипаттаймыз және code мысалдарын береміз.
Java операторы Аты Түр Қысқаша сипаттамасы Мысал
! Логикалық «жоқ» (терістеу) Бірыңғай !x«х емес» дегенді білдіреді. Операнд жалған болса, true мәнін қайтарады . Операнд шын болса false мәнін қайтарады . boolean x = true;
Содан кейін
// !x == false
& Логикалық ЖӘНЕ ( AND, көбейту) Екілік Екі операнд да ақиқат болса true мәнін қайтарады . a = true;
b = false;
Содан кейін
a & b == false
| Логикалық НЕМЕСЕ ( OR, қосу) Екілік Операндтардың кем дегенде біреуі ақиқат болса, true мәнін қайтарады . a = true;
b = false;
Содан кейін
a | b == true
^ Логикалық ерекше НЕМЕСЕ ( XOR) Екілік Операндтардың біреуі ғана ақиқат болса, true мәнін қайтарады . Екі операнд ақиқат немесе жалған болса, false мәнін қайтарады . Негізінде, егер операндтар әртүрлі болса, ол шын мәнін қайтарады . a = true;
b = false;
Содан кейін
a ^ b == true
&& Шартты ЖӘНЕ (қысқа логикалық ЖӘНЕ) Екілік сияқты, &бірақ сол жағындағы операнд false болса &, бұл оператор екінші операндты тексермей false мәнін қайтарады.
|| Шартты НЕМЕСЕ (қысқа логикалық НЕМЕСЕ) Екілік сияқты, |бірақ сол жақтағы оператор true болса , оператор екінші операндты тексермей true мәнін қайтарады.

JavaRush курсындағы логикалық операциялар

Логикалық операциялардан қашып құтылу мүмкін емес және JavaRush курсында олар шарттармен және логикалық деректер түрімен бірге бірінші деңгейден шығады. Бағдарламашылар бірте-бірте математикалық логика әдістерін қолдануды үйренеді. Логикалық конструкциялармен сенімді манипуляциялар үшін белгілі бір ептілік пен белгілі бір процестерді түсіну қажет. Сонымен, бұл операциялар көп ағынды квест соңында толығырақ және мүлде басқа деңгейде қарастырылады, бұл кезде студенттердің көпшілігі енді тікелей синтаксис пен конструкцияларға алаңдамай, тапсырманың мәніне тереңірек үңілуге ​​тырысады.

Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық амалдар – 2

Логикалық терістеу операторы!

Бұл оператор унарлы, яғни ол бір логикалық өрнекке немесе операндқа қолданылады. Түсіну өте қарапайым, кез келген терістеу сияқты: оператор жай ғана өрнектің мағынасын керісінше өзгертеді. Ақиқат кестесі немесе терістеу операциясын орындау нәтижелері:
а мәні
жалған рас
рас жалған
Мысал. Логикалық терістеу операциясы
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

Логикалық ЖӘНЕ - &, сонымен қатар шартты ЖӘНЕ - &&

Логикалық ЖӘНЕ немесе конъюнкция екі өрнекке қолданылады және оның нәтижесі екі операнд да ақиқат болса ғана ақиқат болады. Яғни, егер aнемесе операндтарының бірі жалғанb болса , екінші оператордың мәніне қарамастан өрнек жалған болады . Егер сіз ақиқат 1 саны және жалған 0 деп елестетсеңіз, онда оператор қалыпты көбейту сияқты жұмыс істейді. Сондықтан логикалық ЖӘНЕ жиі «логикалық көбейту» деп аталады. Айтпақшы, бұл факт оператордың жұмысын тез есте сақтауға және оны логикалық немесе оператормен шатастырмауға көмектеседі . Ақиқат кестесі ЖӘНЕ, бұл да оператор жұмысының нәтижесі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жалған болса , онда операндтың мәнін тексерудің мағынасы жоқ екенін байқадыңыз :b операцияның нәтижесі сөзсіз жалған болады . Сонымен, егер бізге екінші операндтың мәні түбегейлі қажет болмаса, оны пайдалану арқылы &&бағдарламадағы есептеулер санын азайтамыз. Мысалдағы барлық операторларды &-мен ауыстырсақ &&, нәтиже дәл солай болады, бірақ бағдарламаның өзі сәл жылдамырақ жұмыс істейді (бірақ біз мұны байқамаймыз, өйткені біз милли-микро... қысқаша айтқанда. , өте кішкентай уақыт бірліктері).

Логикалық НЕМЕСЕ операторы |, сонымен бірге шартты НЕМЕСЕ || операторы

Java тіліндегі НЕМЕСЕ операторы таңбамен көрсетілген |. Логикалық НЕМЕСЕ немесе дизъюнкция екі өрнекке қолданылады және оның нәтижесі екі операнд да жалған болған жағдайда ғана жалған болады. Мұнда біз белгілі бір дәрежеде оператор жағдайындағыдай суретті байқаймыз &, бірақ дәл керісінше. Яғни, егер кем дегенде бір операнд true болса , онда өрнек екінші оператордың мәніне қарамастан ақиқатa | b болатынына кепілдік беріледі . Егер ол логикалық көбейту сияқты әрекет етсе, онда НЕМЕСЕ логикалық қосу болып табылады, егер сіз ақиқат 1 және жалған 0 деп елестетсеңіз. Тек логикалық қосу қалыпты қосудан басқаша жұмыс істейтінін есте сақтаңыз. 1 + 1 бұл жағдайда 2 емес, 1-ге тең (бұл жүйеде 2 саны жай жоқ). Кейде дизъюнкция максимум 0 және 1 деп түсініледі және бұл жағдайда кем дегенде бір операнд 1-ге тең болса ( true ), біз дәл шындыққа ие боламыз . НЕМЕСЕ ақиқат кестесі, сонымен қатар оператордың нәтижесі ретінде белгілі : &|
а б а | б
рас рас рас
рас жалған рас
жалған рас рас
жалған жалған жалған
Логикалық НЕМЕСЕ, сонымен қатар дизъюнкция ретінде белгілі, мысал:
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
Егер біз шартты НЕМЕСЕ операторын қолдансақ - ||орнына |, біз дәл осындай нәтиже аламыз, бірақ шартты ЖӘНЕ жағдайындағыдай , ол үнемді әрекет етеді: егер бірінші операндқа true&& тең болса , онда мәні екінші операнд тексерілмейді, бірақ бірден нәтиже шын болады .

XOR Java - логикалық эксклюзивті НЕМЕСЕ - оператор ^

XOR, модуль 2 қосу, логикалық XOR, логикалық алу, қатаң дизъюнкция, разрядтық толықтауыш... оператордың ^логикалық алгебрада көптеген атаулары бар. Бұл операторды екі операндқа қолдану нәтижесі операндтар әртүрлі болса ақиқат болады, ал операндтар бірдей болса жалған болады. Сондықтан оны нөлдерді ( жалған ) және бірліктерді ( ақиқат ) шегерумен салыстыру ыңғайлы . Ақиқат кестесі XOR, сонымен қатар оператордың нәтижесі ретінде белгілі ^:
Бульдік а Бульдік б а^б
рас рас жалған
рас жалған рас
жалған рас рас
жалған жалған жалған
Мысалы:
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

Логикалық операциялардың басымдылығы

Математикадағы сияқты, бағдарламалауда операторлар бір өрнекте пайда болған кезде белгілі бір орындалу ретіне ие. Унарлы операторлардың екіліктен артықшылығы бар, ал көбейтудің (тіпті логикалық) қосудың алдында. Біз логикалық операторларды тізімде жоғарырақ орналастырдық, олардың басымдығы соғұрлым жоғары болады:
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
Мысалдарды қарастырайық. Конъюнкция мен дизъюнкция ( &және |) әртүрлі басымдыққа ие:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println(a | b & c);
}
Егер солдан оңға қарай жүрсек, яғни алдымен операторды қолданып |, содан кейін - , біз false& мәнін алар едік . Бірақ шын мәнінде, егер сіз осы бағдарламаны іске қоссаңыз, шығыстың ақиқат болатынына сенімді боласыз , өйткені логикалық ЖӘНЕ операторы логикалық НЕМЕСЕ операторына қарағанда басымдыққа ие болады . Шатастыруды болдырмау үшін, нені көбейту, ал нені қосу сияқты әрекет ететінін есте сақтау керек . Басымдық ретін өзгертуге болады. Мектеп математикасындағы сияқты жақшаларды пайдаланыңыз. Мысал codeымызды сәл өзгертейік: &|&|
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, бірақ q == 5бұл логикалық өрнек және ол false мәніне тең , өйткені жоғарыда біз q2 санымен инициализация жасадық. Айнымалымен де солай c. Бұл сан 25-ке тең, бірақ (c < 100) true мәніне тең логикалық өрнек . Бұл бағдарламаның нәтижесі:

true
Күрделі логикалық өрнектерді өте күрделі және тармақталған шарттарды тексеру үшін пайдалануға болады, бірақ оларды шамадан тыс қолдануға болмайды: олар codeты оқуды қиындатады.

Биттік (разрядтық) операторлар

Мақаланың басында біз , операторлары мен &Java бүтін сандар түрлеріне қатысты қолданылуы мүмкін екенін айттық. Бұл жағдайда олар разрядтық операторлар болып табылады. Оларды биттік деп те атайды, өйткені бір цифр бір бит және бұл операциялар арнайы биттермен жұмыс істейді. Әрине, олар логикалық операторларға қарағанда біршама өзгеше жұмыс істейді және дәл қалай түсіну үшін екілік санау жүйесінің не екенін білу керек. Егер сіз бұл туралы ештеңе білмесеңіз немесе мүлдем ұмытып қалсаңыз, алдымен Java мақаласын оқып шығуды ұсынамыз: бит және byteтар және екілік санау жүйесінде тек екі цифр бар екенін еске саламыз - 0 және 1 және барлық деректер компьютерде шартты нөлдер мен бірліктерді қолдану арқылы дәл берілген. Біз үйренген сандардың кез келгенін (ондық; олар үшін 0-ден 9-ға дейінгі 10 түрлі цифр бар, олармен кез келген сандарды жазамыз) екілік санау жүйесінде көрсетуге болады. Ондық санды екілік санау жүйесіне санау жүйесінің негізін (2) пайдаланып бағанға реттік бөлу арқылы түрлендіруге болады. Кері тәртіпте жазылған әр қадамдағы бөлудің қалдықтары бізге қажетті екілік санды береді. Мұнда, мысалы, 103 ондық санын екілік көрсетуге түрлендіру: |^Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық амалдар – 3

JavaRush курсындағы екілік санау жүйесі

JavaRush курсында олар MultiThreading квестін (10-деңгей, 1-дәріс) оқып жатқанда екілік санау жүйесі туралы айтады, дәрістен кейін бекітуге арналған бірнеше тапсырмалар бар. Дегенмен, бұл тақырып мүлде қиын емес, тіпті курста әлі де жетпеген болсаңыз да, сіз оны түсінуіңіз мүмкін.

&, |және Java- дан басқа ^разрядтық операторларды да пайдаланады:
  • ~ разрядтық терістеу операторы
  • >>биттік оңға жылжыту
  • >>>белгісі жоқ биттік оңға жылжу
  • <<солға биттік жылжу
Жаңадан бастағандар үшін разрядтық операторлар өте түсініксіз және жасанды болып көрінеді. Олар көбінесе білім беру мәселелерін шешуден басқа, не үшін қажет екенін түсінбейді. Шындығында, оларды тиімді бөлу мен көбейтуді ұйымдастыру үшін кем дегенде пайдалануға болады, ал кәсіпқойлар оларды codeтау/деcodeтау, шифрлау және кездейсоқ сандарды генерациялау үшін пайдаланады.

Биттік операторлар &, | және ^

Осы операторлардың жұмыс істеу мысалын қарастырайық. Бізде екі бүтін сан бар делік:
int a = 25;
int b = 112; 
Біз оларға үш операцияны қолдануымыз керек және &нәтижені экранда көрсетеміз. Міне, бағдарлама codeы: |^
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 санының екілік көрінісінің соңғы битіне, соңғыдан кейінгі битпен соңғы битке қосылады және т.б.: Сол Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық операциялар – 4логиканы жағдай |және ^. Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық операциялар – 5

Битті солға немесе оңға жылжытыңыз

Java тілінде бірнеше бит ауыстыру операторлары бар. Ең жиі қолданылатын операторлар <<және >>. Олар белгіні сақтай отырып, санның екілік көрінісін солға немесе оңға жылжытады, ал оңға жылжу жағдайында белгіні сақтай отырып (төменде белгіні сақтау нені білдіретінін түсіндіреміз). Оңға ауыстырудың тағы бір операторы бар >>>. Ол бірдей әрекетті жасайды, бірақ >>белгіні сақтамайды. Олай болса, мысал арқылы олардың жұмыстарын қарастырайық. int a = 13 a << 1a санының екілік көрінісінің барлық биттерін солға 1 битке жылжытады. Жеңілдету үшін екілік жүйедегі 13 санын 0000 1101 деп елестетейік. Шындығында бұл сан келесідей көрінеді: 00000000 00000000 00000000 00001101, өйткені Java intсандар үшін 4 byte немесе 32 бит бөледі. Дегенмен, бұл мысалда рөл атқармайды, сондықтан бұл мысалда біздің санды бір byte деп қарастырамыз. Java тіліндегі логикалық операциялар.  Java тіліндегі разрядтық амалдар – 6Оң жақта босаған бит нөлмен толтырылады. Осы операцияның нәтижесінде біз 26 санын аламыз. a << 2Ол санның екілік кескінінің барлық биттерін aсолға 2 битке жылжытады, ал оң жақта босаған екі разряд нөлмен толтырылады. Нәтижесінде біз 52 санын аламыз. a << 3Нәтиже 104 болады... Үлгіні байқадыңыз ба? n позиция бойынша солға биттік жылжыту aсанды an дәрежесіне 2-ге көбейту сияқты жұмыс істейді. Бұл теріс сандарға да қатысты. Бұл -13 << 3-104 нәтижесін береді. a >> nn санының екілік көрінісін оңға жылжытады. Мысалы, 13 >> 1 1101 санын 0110 санына түрлендіреді, яғни 6. Ал 13 >> 2нәтиже 3 болады. Яғни, мәні бойынша мұнда санды n-дің дәрежесіне 2-ге бөлеміз, мұндағы n - ауысым саны. оңға қарай, бірақ бір ескертумен: егер сан тақ болса, осы операция кезінде біз санның соңғы битін қалпына келтіретін сияқтымыз. Бірақ жағымсыз жағдайда жағдай басқаша. Айталық, егер сіз операцияны орындауды сұрасаңыз, бағдарлама не шығаратынын тексеріп көріңіз -13 >> 1. Сіз ойлағандай -6 емес, -7 санын көресіз. Бұл теріс сандарды Java және басқа бағдарламалау тілдерінде сақтау тәсіліне байланысты болады. Олар қосымша code деп аталатын нәрседе сақталады. Бұл жағдайда ең маңызды сан (сол жақтағы) белгінің астында беріледі. Теріс сан болған жағдайда ең маңызды цифр 1 болады.

Қосымша code

Санды қарастырайық int a = 13. Егер бағдарламада оның екілік көрінісін консольге пәрмен арқылы басып шығарсаңыз System.out.println(Integer.toBinaryString(a));, онда біз 1101 аламыз. Шындығында, бұл стенографиялық белгі, өйткені тип нөмірі intжадта 4 byte алады, сондықтан компьютер оны көбірек «көреді». бұл сияқты:

00000000 00000000 00000000 00001101
Ең маңызды сан - нөл, яғни бізде оң сан бар. Қосымша codeқа түрлендіру үшін:
  1. Біз «тікелей code» деп аталатынға -13 санын жазамыз. Ол үшін санның ең маңызды цифрын 1-ге өзгертіңіз.
    Әрекеттің нәтижесі:

    
    10000000 0000000 0000000 00001101
  2. Әрі қарай, таңба битінен басқа барлық биттерді (0-ді 1-ге, 1-ді 0-ге өзгертеміз) төңкереміз. Шын мәнінде, біз оны өзгерттік.
    Акцияның нәтижесі:

    
    11111111 11111111 11111111 11110010

    (иә, 1 және 2-қадамдарды біріктіруге болады, бірақ бұл туралы осылай ойлаған дұрыс)

  3. Алынған санға 1 қосыңыз.Әрекеттің
    нәтижесі:

    
    11111111 11111111 11111111 11110011
Алынған екілік сан -13, екінің толықтауыш codeында жазылған және разрядты ауыстыру (және басқа операциялар) оған арнайы қолданылады. Операция логикасындағы айырмашылық барлық операцияларда байқалмайды. Айталық, солға жылжу кезінде айырмашылық байқалмайды, біз теріс сандармен оң сандармен жұмыс істей аламыз. Енді оңға бұрылайық -13 >> 1. Біздің оператор >>белгіні сақтайтындықтан, бұл операцияда сол жақта босатылған барлық разрядтар нөлдермен емес, бірліктермен толтырылады. Осылайша, нөмірді ауыстыру

11111111 11111111 11111111 11110011
бір бит оңға қарай, нәтижесінде келесі бит тізбегі пайда болады:

11111111 11111111 11111111 11111001
Егер біз бұл санды тікелей codeқа түрлендірсек (яғни, алдымен 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ондық түрде.

Қысқаша қорытындылар

  • Барлық логикалық операторлар логикалық өрнектерге, яғни ақиқат немесе жалған деп айтуға болатын өрнектерге қолданылады .
  • Егер операторлар &немесе сандарға қолданылса, біз енді логикалық операциялар туралы емес, разрядтық амалдар туралы айтып отырмыз |. ^Яғни, екі сан да екілік жүйеге түрлендіріліп, логикалық қосу, көбейту немесе азайту амалдары осы сандарға аздап қолданылады.
  • Математикалық логикада конъюнкция мен дизъюнкцияға операторлар &және сәйкес келеді.|
  • Логикалық ЖӘНЕ 1 ( шын ) және 0 ( жалған ) көбейтуге ұқсас .
  • Логикалық НЕМЕСЕ 1 ( ақиқат ) және 0 ( жалған ) арасындағы максимумды табуға ұқсас .
  • a бүтін санының разрядты терістеу үшін оператор пайдаланылады ~a.
  • Логикалық a логикалық өрнегін жоққа шығару үшін операторды пайдаланыңыз !a.
  • Теріс сандар екі толықтауыш codeында сақталады және өңделеді.
  • Оңға биттік ығысу >>( ) белгісін сақтауы немесе сақтамауы мүмкін >>>.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION