簡體   English   中英

C++ 數學做錯了嗎?

[英]C++ did wrong mathematics?

我在 C++ 中編譯了這個基本計算,但是在計算器上做的時候得到了錯誤的答案。 即使我將“ans”聲明為“long long int”,這怎么可能?

#include <iostream>
#include <cstdlib>
#include<vector>
#include<string>
#include <unordered_map>
#include <utility>
using namespace std;


int main(){

  long long int ans=1-1000000000+1-1000000000+1-1000000000;
  cout<<ans; //-2999999997
  return 0;
}

預期的答案是針對cout<<ans;

但編譯器返回的是: 1294967299

請讓我知道我在哪里出錯了。

一個更現代的 C++ 編譯器會告訴你問題是什么,就像我的一樣:

警告:“int”類型的表達式中的 integer 溢出導致“1294967299”

這些數字對於您的int實現中的默認大小來說太大了。 您必須告訴您的 C++ 編譯器您的數字是long long s:

long long int ans=1-1000000000LL+1-1000000000LL+1-1000000000LL;

long long int所做的就是告訴您的 C++ 編譯器數學表達式的結果long long int 您的問題是您必須告訴 C++ 編譯器它用於計算表達式的數字也是long long s。

它采用ints並將它們計算為ints ,然后將結果存儲在long long中。 因此,在您存儲long long之前會發生溢出

為了做到這一點,將LL放在每個數字的末尾。

像這樣: 1LL而不是1

你錯了沒有啟用編譯器警告。 假設您使用的是g++clang++ ,請使用-Wall ,您將受到啟發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM