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

[c++] operator ! wykrzyknik

VPS Starter Arubacloud
0 głosów
4,623 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,780 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,780 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,340 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 530 wizyt
pytanie zadane 22 marca 2020 w C i C++ przez wall7489 Obywatel (1,250 p.)
0 głosów
1 odpowiedź 363 wizyt
pytanie zadane 27 lipca 2016 w Ruby przez Szalbik Początkujący (430 p.)
0 głosów
1 odpowiedź 1,942 wizyt
pytanie zadane 27 sierpnia 2019 w C i C++ przez soq72630 Nowicjusz (180 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...