Jaký je význam této operace [uzavřen]

0

Otázka

Takže máme tento kus kódu na test a já jsem měl nulovou představu, co je význam a jak to funguje. unsigned int a = 1, b = 2, c; a pak c = a&b || a&&b;

Otázka zněla: Jaká je hodnota c. Odpověď byla 1.

Může mi někdo vysvětlit, co se děje v inicializaci c?

bitwise-and c expression logical-and
2021-11-19 10:46:43
3

Nejlepší odpověď

1

Na unsigned int proměnné a a b držet některé trochu-vzor, které představují 1 a 2. To nebude, ale kvůli popis, řekněme, že

  a = 0b0001
  b = 0b0010

To by byla čísla 1 a 2 ve 4-bitové celé číslo.

Na & provozovatel má bit-moudrý, a tak kousek po kousku budete hodnotit (0,0)->0, (0,1)->0, (1,0)->0 a (1,1). Takže, pro dvě celá čísla výše

    a = 0b0001
    b = 0b0010
  a&b = 0b0000

Vidíme, že a&b je nulový, protože nemají žádné překrývající 1-bitů.

Provozovatel && má logické a, což znamená, že výsledek je 1, pokud jsou oba argumenty jsou non-nula a nula jinak. Tak a && b = 1 protože ani a a b jsou nulové.

     a = 0b0001
     b = 0b0010
  a&&b = 0b0001

Na || provozovatel je logické, nebo; to vám dává 1, pokud některý z argumentů jsou nenulové a pouze nulový, pokud se oba argumenty jsou nulové. Tak, od

  a&b = 0b0000
 a&&b = 0b0001

kde a&&b je non-nula, dostanete c = (a&b) || (a&&b) = 1.

2021-11-19 11:09:58
0

Tento úkol prohlášení

c = a&b || a&&b;

může být přepsán pro přehlednost followinmg způsobem

c = ( a&b ) || ( a&&b );

a & b je bitové operace AND. Jako a je rovna 1 a b je rovna 2 pak výsledek operace je roven 0 (Já používám pouze 8 bitů v počtu zastoupení pro jednoduchost)

00000001
&
00000010
========
00000000

Z C Standard (6.5.10 Bitové A operátor)

4 výsledek binárního operátoru & interfaces A operandy (to znamená, že každý bit ve výsledku je nastaven, pokud a pouze tehdy, pokud každý odpovídající bity v operandy převedeny, je nastavit).

V tomto výrazu a && b tam je logické A provoz. To se rovná 1 když oba operandy jsou nerovné 0. Jako a a b jsou nerovné 0 pak výsledek operace je 1.

Z C Standard (6.5.13 Logické A operátor)

3 && provozovatel výnos 1, když oba jeho operandy porovnat nerovné 0; jinak, výnosy 0. Výsledek je typu int.

Takže máte

c = 0 || 1;

kde NEBO logické operace se používá. To přináší 1 pokud je alespoň jeden operand není rovno 0.

Z C Standard (6.5.14 Logické NEBO operátor)

3 || provozovatel výnos 1, když buď jeho operandy porovnat nerovné 0; jinak, výnosy 0. Výsledek je typu int.

Takže proměnná c bude přidělen s hodnotou 1.

2021-11-19 10:56:40

Děkuji vám za vysvětlení :) Teď už to konečně chápu.
DomHofman

Ale vy jste nenapsal, co to vlastně dělá. Když c bude 1 nebo 0 (tedy jaký smysl to mít)
0___________
0

Vysvětlím to z jiného úhlu pohledu.

a&b dá nenulovou pouze tehdy, pokud oba mají alespoň jeden bit na stejné pozici

a&&b1 pouze tehdy, pokud oba nejsou žádné

a&b || a&&b bude se dát být jedním pouze tehdy, pokud oba nejsou nulové a alespoň jeden bit na stejné pozici.

To může být snížena na:

int c = a&&b;

2021-11-19 11:17:24

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................