Loading...

Биталдык операциялар

 

Бинардык формулировкадагы сандардын жеке цифралары боюнча биттик операциялар аткарылат. Мисалы, экилик системадагы беш саны үч сандан турат: 101, сегиз саны төрт сандан турат: 1000.

Сменалык операциялар

Жана жылдыруу операциялары сандын экилик чагылдырылышын бир нече битке оңго же солго жылдырууга мүмкүндүк берет. Shift операциялары бүтүн операнддарга гана колдонулат. Эки операция бар:

  • <<

Биринчи операнд тарабынан көрсөтүлгөн сандын бит көрүнүшүн солго экинчи операнд тарабынан көрсөтүлгөн биттердин санына жылдырат.

  • >>

Сандын биттик көрүнүшүн биттердин белгиленген саны боюнча оңго жылдырат.

Операцияларды колдонуу:

1

2

var b int = 2 << 2;           // 10  на два разрядов влево = 1000 - 8

var c int = 16 >> 3;          // 10000 на три разряда вправо = 100 - 2

Экилик системадагы 2 саны 10. Эгер 10 санын эки орун солго жылдырсаңыз, анда 1000 чыгат, бул ондук системада 8ге барабар.

Бинардык системадагы 16 саны 10000. Эгер 10000 санын үч орундуу оңго жылдырсаңыз (акыркы үч цифра жокко чыгарылат), анда 10 чыгат, ал ондук санда 2 санын билдирет.

Биталдык операциялар

Биттик операциялар бүтүн операнддардын биттери боюнча гана аткарылат:

  • & : биттик бириктирүү (ЖАНА операциясы же биттик көбөйтүү). Эгерде эки сандын тең тиешелүү цифралары 1 болсо, 1ди кайтарат. Эгерде жок дегенде бир сандын цифрасы 0 болсо, 0 кайтарат.
  • : биттик дизъюнкция (ЖЕ операция же биттик кошуу). Эгерде эки сандын тең тиешелүү цифраларынын жок дегенде бири 1 болсо, 1ди кайтарат
  • ^ : биттик XOR. Эки сандын тиешелүү цифраларынын бири гана 1 болсо, 1ди кайтарат
  • &^ : битти кайра коюу (ЖАНА ЭМЕС). Туунду туюнтмада z = x &^ yар бир z бит 0 болот, эгерде у биттин тиешелүү бити 1 болсо. Эгерде удагы бит 0 болсо, анда хдан тиешелүү биттин мааниси алынат.

Операцияларды колдонуу:

1

2

3

4

5

6

7

8

9

package main

import "fmt"

 

func main() {

    var a int = 5 | 2;          // 101 | 010 = 111  - 7

    var b int = 6 & 2;          // 110 & 010 = 10  - 2

    var c int = 5 ^ 2;          // 101 ^ 010 = 111 - 7

    var d int = 5 &^ 6;         // 101 &^ 110 = 001 - 1

}

Мисалы, туюнтма 5 | 27. Экилик системада 5 саны 101, 2 саны 10 же 010. Эки сандын тең тиешелүү цифраларын кошолу. Кошкондо, жок эле дегенде, бир бит 1ге барабар болсо, анда эки биттин тең суммасы 1ге барабар. Демек, биз:

1

0

1

0

1

0

1

1

1

Натыйжада 111 санын алабыз, ал ондук системада 7 санын билдирет.

Дагы бир сөздү алалы 6 & 2. Экилик системада 6 саны 110, 2 саны 10 же 010. Эки сандын тең тиешелүү цифраларын көбөйтөлү. Бул эки биттин экөө тең 1ге барабар болсо, эки биттин көбөйтүндүсү 1ге барабар. Болбосо, көбөйтүндү 0гө барабар. Демек, биз алабыз:

1

1

0

0

1

0

0

1

0

Биз ондук санда 2 болгон 010 санын алабыз.