2013-02-01 14 views
17

Myślę, że jest to proste pytanie, ale walczę z następującymi. w przykładzie mam następujące oświadczenie (język C):if statement integer

int foobar 

if (foobar) 
{ 
// do something. 
} 

teraz, jeśli się nie mylę o tym, to stwierdzenie jest prawdziwe, gdy foobar nie jest zerem. więc powinno być całkiem takie samo jak (foobar! = 0);

Ale co się stanie, jeśli liczba stała się liczbą ujemną?

Odpowiedz

35

negatywna lub pozytywna. Wszystko, co nie jest to prawda 0 wartość if

także rozważyć szereg negatywnych: -1

-1 w C wewnątrz jest przedstawiony jako: 0xFFFFFFFF, w tym przypadku byłoby to liczba dodatnia, jeśli Rzucam go do liczby całkowitej bez znaku.

Ale po nadejściu kompilatorów standardowych C99, proponuję użyć zamiast tego <stdbool.h>. Sprawia zgadywania pracować o wiele mniej:

Read here about stdbool.h

+2

Reprezentacja liczb ujemnych jest definiowana przez implementację. Również nie ma znaczenia na to pytanie, tylko wartość * ma znaczenie, niezależnie od tego, jak jest reprezentowana. W tym kontekście 'int' nie jest konwertowane na' unsigned int'. –

2

sama,

if (foobar) 

foobar nie oznacza zera więc czy jest dodatni czy ujemny, nie ma znaczenia, to wciąż nie jest zerowy

0

Twoje polecenie powinno zwrócić wartość true, jeśli foobar jest liczbą ujemną (nadal jest różna od zera), ale powinieneś unikać tego rodzaju testu, ponieważ nie jest to najlepsza praktyka testowania zmiennych, które mogą mieć różne "prawdziwe" wartości w ten sposób.

+0

to jest właśnie to, czego staram się uniknąć, że dostaje się do stanu nieznanego. Widziałem tę linię kodu w programie kogoś innego, a potem mnie uderzyło. dlaczego używać tego oświadczenia zamiast if (foobar! = 0); teraz wiem. Dziękuję wszystkim za odpowiedź na moje pytanie! –