2017-10-06 2 views
-3

Ich entschuldige mich, wenn dieser Fehler das Ergebnis eines Tippfehlers ist, aber ich kann nicht herausfinden, wie man meine Variable negativ macht, wenn die korrekte Syntax y = -x sein sollte;Wie man eine Variable negativ macht? C++

std::cout << "loop size = " << loop_size_ << std::endl; 
core::Size neg_loop_size_ = -loop_size_; 
std::cout << "neg loop size = " << neg_loop_size_ << std::endl; 

Wenn ich es laufen, dies ist das Ergebnis, das ich bekommen:

loop size = 4 
neg loop size = 18446744073709551612 

Wie erhalte ich eine neue Variable gleich -4?

+5

Es ist ein unsigned integraler Typ, der ist, warum Sie nicht negativen Wert zu bekommen. Der Datentyp von core :: Size sollte signiert sein, um native ganze Zahlen zu enthalten – Asesh

+2

Es scheint, dass 'core :: Size' ein * unsigned * Integer-Typ ist, was bedeutet, dass es niemals" negativ "sein kann. Was passiert, wenn Sie versuchen, * '-loop_size_' zu drucken? –

+0

Das macht Sinn, dass es unsigned ist - core :: Size ist eine ganze Zahl, die für etwas gedacht ist, das niemals negativ wird. Ich werde einen anderen Datentyp verwenden ... Danke! – Amanda

Antwort

1

Dies ist zweifellos ein Problem der Unterzeichnung. Sie haben angegeben, dass neg_loop_size core::Size ist. core::Size ist wahrscheinlich eine Längenmessung. Eine Länge kann nicht negativ sein. („Wie viele Kilometer haben Sie heute laufen, Josy?“, „Warum, lief ich negativ 4 Kilometer!“)

Also, der Compiler und cout sind Nötigung richtig -1 bis „Schleife um“ auf die höchste Zahl möglich mit 8 Bytes. Bedenken Sie:

18446744073709551612 + 4 - 1 
= 2^65 -1 
= 0xFFFFFFFFFFFFFFFF 
= (core::Size) 0 - 1 

Wenn Sie einen negativen Wert wollen, müssen Sie entweder eine String-Manipulation und Umwandlung selbst zu tun, oder einen Datentyp wählen, der Compiler und cout interpretieren wird als negativ. Zum Beispiel:

int i = 0; 
i -= 1; 
std::cout << "i = " << i << std::endl; 
+0

Ja, Core :: Größe ist genau das, eine Längenmessung. Mit int hat es behoben. – Amanda

0

Ich denke, das Problem ist Core: Größe Datentyp ist unsigned. Du hast also ein Problem.

Wenn Sie den Wert in einer Ganzzahl speichern, sollten Sie die erforderliche Ausgabe erhalten.

int main() { 
     int i = 5; 
     int j = -i; 
     cout<<endl<< j << endl; 

    return 1; 
} 

Ausgang ---

$>:~/tmp$ vim c.cpp 
$>:~/tmp$ g++ c.cpp 
$>:~/tmp$ ./a.out 
-5 
$ 
Verwandte Themen