1. Bitwise &operator

Nauna naming sinabi na ang lahat ng data ay nakaimbak sa memorya sa isang binary na representasyon. Kaya medyo matagal na ang nakalipas, ang mga programmer ay nakaisip ng maraming mga kawili-wiling paraan upang gumana sa mga binary na numero. Halimbawa, ang Java ay may mga lohikal na operator na nagpapatakbo sa mga bit ng binary na representasyon ng isang numero: &(AT), | (OR), ~(HINDI o pandagdag) at ^(XOR - eksklusibo o).

a & b
Bitwise &(AND) operator

Ang operator na ito ay halos kapareho sa logical &(AND) operator, tanging ito ay tinutukoy ng isang solong ampersand, hindi dalawa:

At ito ay inilapat sa mga indibidwal na bit. Ang bawat operand ay itinuturing bilang isang array ng mga bit, at ang iika-bit ng resulta ay kinakalkula gamit ang iika-bit ng bawat isa sa dalawang operand.

Ang unang bit ng resulta ay kakalkulahin batay sa unang bit ng numero a at ang unang bit ng numero b, ang pangalawang bit — batay sa pangalawang bit ng numero a at pangalawang bit ng numero b, atbp.

Ang &(AND) operator ay nangangahulugang "ang resultang bit ay katumbas ng isa lamang kung ang katumbas na bit ng numero aay katumbas ng isa ANDang katumbas na bit ng numero bay katumbas ng isa":

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

Mga halimbawa:

Halimbawa Resulta
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. Bitwise |operator

Ang operator na ito ay halos kapareho sa lohikal |(OR) na operator, tanging ito ay tinutukoy ng isang patayong linya, hindi dalawa:

a | b

At ito ay inilapat sa mga indibidwal na bit. Ang bawat operand ay itinuturing bilang isang array ng mga bit, at ang ith bit ng resulta ay kinakalkula gamit ang ith bit ng bawat isa sa dalawang operand.

Ang bitwise |(OR) operator ay nangangahulugang "ang resultang bit ay katumbas ng isa kung ang katumbas na bit ng numero aay katumbas ng isa ORang katumbas na bit ng numero bay katumbas ng isa":

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

Mga halimbawa:

Halimbawa Resulta
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

Kapag ang katumbas na bits (ang mga bit sa parehong posisyon) ng parehong mga numero ay zero ay katumbas ng zero ang katumbas na bit ng resulta.



3. Bitwise ^(XOR o "eksklusibo o") operator

Ang XORoperator, na binibigkas din na eksklusibo o , ay tinutukoy ng ^simbolo. Upang ilagay ito sa keyboard, pindutin ang shift + 6 (sa English na layout ng keyboard).

a ^ b

Ang operator na ito ay medyo katulad ng ORoperator, kasama na ito ay may katulad na pangalan:XOR

Ang bitwise ^(XOR) operator ay nangangahulugang "ang resultang bit ay katumbas ng isa kung ang katumbas na bit ng numero aay katumbas ng isa ORang katumbas na bit ng numero bay katumbas ng isa ngunit hindi pareho sa parehong oras":

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Mga halimbawa:

Halimbawa Resulta
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

Kapag ang katumbas na bits (ang mga bit sa parehong posisyon) ng parehong mga numero ay magkaiba , ang katumbas na bit ng resulta ay katumbas ng isa . Kung ang mga bit ay pareho , ang resultang bit ay katumbas ng zero .



4. Bitwise ~(HINDI, COMPLEMENT) operator

Sa tingin ko ay mahulaan mo na kung ano ang ginagawa nito. Ang operator na ito ay halos kapareho sa logical !(NOT) operator, ngunit ito ay tinutukoy ng isang tilde , hindi isang tandang padamdam:

~a

Isa itong unary operator, na nangangahulugang nalalapat ito sa isang numero, hindi dalawa. Lumilitaw ito bago ang nag-iisang operand na ito.

Ang bitwise ~operator ay nangangahulugang "ang resultang bit ay isa kung ang katumbas na bit ng numero aay zero, at ito ay zero kung ang katumbas na bit ng numero aay isa":

~1 = 0
~0 = 1

Mga halimbawa:

Halimbawa Resulta
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

Binabago lamang ng operator na ito ang bit na 1kay 0at mga bit na para 0sa 1.