• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[c++] operator ! wykrzyknik

Object Storage Arubacloud
0 głosów
4,685 wizyt
pytanie zadane 27 sierpnia 2019 w C i C++ przez soq72630 Nowicjusz (180 p.)
#include<iostream>
using namespace std;
int main()
{
	short int a=0x1234, b, c;
	b=!a;
}

b=0, ale dlaczego, jak działa tu operator wykrzyknika? prosze o pomoc..

2 odpowiedzi

+1 głos
odpowiedź 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

Operator negacji zwraca wartości true false.
Jeżeli twoja zmienna X ma wartość 0 to wyrażenie !X daje true. Co jest rzutowane na 1.
W przeciwnym wypadku wyrażenie !X daje false. Czyli 0.

Do poczytania:
https://en.cppreference.com/w/cpp/language/operator_logical

komentarz 27 sierpnia 2019 przez soq72630 Nowicjusz (180 p.)
ja to wiem, ale liczba a to 1234 w zapisie szesnastkowym, czyli 0001 0010 0011 0100 w dwojkowym a co daje 4660 w zapisie dziesietnym

0 daje false
kazda inna true, czyli w tym przypadku jest true bo 4660=/=0

przeciwienstwo true jest false, wiec wynik rowny 0, dobrze mysle?
komentarz 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

tak, dobrzy myślisz. Operator ! możesz zasymulować funkcją:

template <typename T>
bool operator_not(T liczba) {
    if (liczba == 0)
        return true;
    else
        return false;
}


 

0 głosów
odpowiedź 27 sierpnia 2019 przez Patrycjerz Mędrzec (192,320 p.)
W języku C wartości logiczne to zwykła liczba całkowita. Zero to fałsz, zaś liczba różna od zera to prawda. Wynikiem operatorów logicznych jest 0 lub 1. W C++ natomiast istnieje oddzielny typ bool, ale poprzez operator przypisania do typu całkowitego, rzutujesz jego wartość do 0, która tak jak w C oznacza fałsz.
komentarz 27 sierpnia 2019 przez soq72630 Nowicjusz (180 p.)
ja to wiem, ale liczba a to 1234 w zapisie szesnastkowym, czyli 0001 0010 0011 0100 w dwojkowym a co daje 4660 w zapisie dziesietnym

0 daje false
kazda inna true, czyli w tym przypadku jest true bo 4660=/=0

przeciwienstwo true jest false, wiec wynik rowny 0, dobrze mysle?

Podobne pytania

0 głosów
2 odpowiedzi 563 wizyt
pytanie zadane 22 marca 2020 w C i C++ przez wall7489 Obywatel (1,250 p.)
0 głosów
1 odpowiedź 370 wizyt
pytanie zadane 27 lipca 2016 w Ruby przez Szalbik Początkujący (430 p.)
0 głosów
1 odpowiedź 2,028 wizyt
pytanie zadane 27 sierpnia 2019 w C i C++ przez soq72630 Nowicjusz (180 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...