2017-10-06 8 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

は、それはあなたが負の値を取得されていません理由です符号なし整数型です。 core :: Sizeのデータ型は、ネイティブ整数を保持するように署名する必要があります – Asesh

+2

'core :: Size'は* unsigned *型のようです。 '' -loop_size_'を印刷しようとするとどうなりますか? –

+0

それはunsigned-core :: Sizeが整数であることが意味を成しています。私は別のデータ型を使用します...ありがとう! – Amanda

答えて

1

これは間違いなく署名の問題です。 neg_loop_sizeがcore::Sizeであると指定しました。 core::Sizeは、長さスタイルの測定を意図しています。長さは負であってはいけません。

したがって、コンパイラと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 
$ 
関連する問題