2016-09-14 14 views
-2

、私は、私が手64ビット符号なし減算の問題

std::cout << "Diff: " << Diff; 

、following-

size_t Num2= 2359198081 
size_t Num1= 2359197799 

size_t Diff= Num2 - Num1; 

を持って

Diff: 18446744071938113404 

期待どおり、Num2とNum1が2より大きいので負の値になる32

私が行う場合は、

std::cout << "Diff: " << Num2 - Num1 << std::endl; 

は、それから私は、

差分取得:予想通りである282

私はここで間違っていますか?むしろ正しい64ビット減算を行うにはどうしたらいいですか?

+2

実際のコードを表示します。あなたが説明していることは意味をなさないので、あなたが言及していないことが起こっているはずです。問題をコンパイル、実行、および表示するプログラムを提供します。 –

+1

'size_t'は符号なしの型です。負の値を期待している場合は、期待を調整してください。実際のコードを表示します。あなたが示したもので、 'Num2 - Num1'は282を返します。あなたはおそらく' Num1 - Num2'を計算していますか?これを読んでください:[mcve] –

+0

「符号なし」整数を使って負の値を得る方法はありますか? –

答えて

3

コメントで他の人が尋ねるようにコードを投稿できますか(50+担当者の要件のために申し訳ありませんでした)。 size_tunsigned intまたはunsigned long intなので、32ビットより短いunsigned intを実装するマシン/コンパイルシステムを使用していない限り、減算は282になります。

私はこれを試して、正しく動作します(64ビット)。あなたのケースでDiff0xFFFFFFFF966A0000を印刷しているので、私はsize_tでも64ビットの実装を使用していると思います。あなたが完全なコードを投稿した場合にのみ、より多くのことが言える!

+0

愚かなルール。 50. –

+0

よろしくお願いします。コメントしよう!どうも – asterx

1

問題は、あなたがDiff = Num2 - Num1を言うことを意味しかし、あなたが誤ってDiff = Num1 - Num2言っていることです。

size_t Num2= 2359198081; 
size_t Num1= 2359197799; 
size_t Diff = Num1 - Num2; 
std::cout << Diff << std::endl; 

プリント:

あなたが取得しているものです。まあ、あなたは18446744071938113404を取得していると主張していますが、それは少し異なります。実際の数字は違うと思いますが、あなたの質問は正確ではありません。

size_t num2 = 2359198081; 
size_t num1 = 2359197799; 
size_t diff = num2 - num1; 
std::cout << diff << std::endl; 

プリント:あなたが望むものである

Demo

関連する問題