2017-10-06 139 views
-3

我很抱歉,如果這個錯誤是一個錯字的結果,但我無法弄清楚如何使正確的語法應該是我的變量消極y = -x;如何使變量的負值? 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; 

當我運行它,這是結果我得到:

loop size = 4 
neg loop size = 18446744073709551612 

如何獲得一個新的變量等於-4?

+5

這是一個無符號整型,這就是爲什麼你沒有得到負值。核心::大小的數據類型應該被簽名以保存本地整數 – Asesh

+2

看來'core :: Size'是一個* unsigned *整數類型,這意味着它永遠不會是「負數」。如果您嘗試*打印* -loop_size_',會發生什麼情況? –

+0

這是有道理的,它是無符號的 - core :: Size是一個整數,用於永遠不會消極的東西。我將使用不同的數據類型...謝謝! – Amanda

回答

1

這無疑是一個簽名問題。你已經指定了neg_loop_size是core::Sizecore::Size很可能是一種長度測量。長度不能爲負數。 (「你今天跑了多少公里,Josy?」,「爲什麼,我跑負4公里!」)

因此,編譯器和cout正確強制-1以「循環」到儘可能高的數字有8個字節。試想一下:

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

如果你想有一個負值,你要麼需要自己做一些字符串操作和轉換,或者選擇一個數據類型,編譯器和cout將其解釋爲陰性。例如:

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

是的,core :: Size就是這樣一個長度測量。用int修復它。 – Amanda

0

我認爲問題是核心:大小數據類型是無符號的。所以你有問題。

如果將值存儲在整數中,則應該獲得所需的輸出。

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

    return 1; 
} 

輸出---

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