我想获得输出2^64,而C 中没有任何扩展

I want to get output 2^64 without any extension in C++

本文关键字:扩展 任何 输出      更新时间:2023-10-16

感谢您检查此问题。因此,如果我输入为2^64,我想知道如何获得2^64。在未签名的长int中,它仅达到2^64-1 == 18444444444073709551615重点是,当输入号== 184446744073709551616输出将为" 2^64"但是我拥有的代码是:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
  unsigned long long int a;
  cin >> a;
  if (a == pow(2,64))
  {
     cout << "2^64";
  }
}

所以问题是,如果我输入:184467444073709551616它不会输出。如何使输出" 2^64"?

unsigned long long是64位或更大。这意味着在某些机器中,它将仅是64-bits。在这种情况下,您将在代码中存在溢出问题。

检查ULLONG_MAX#include <climits>

类型无符号的对象的最大值长长int 184444444073709551615(2^64-1)或更大* 实际值取决于特定的系统和库实现,但应反映目标平台中这些类型的限制。

(来自http://www.cplusplus.com/reference/climits/)。

这意味着您的目标平台支持64位未签名的长长值。因此,您的极限为2^64-1。

您可以尝试使用大整数库,例如以这种限制来工作。

C 中最大的数据类型与编译器到编译器的不同之处...但是通常无符号的长长INT当然被认为是大的!因此,要解决您的问题..,最好将IF条件更改为POW(2,64)-1 ...

除此之外,如果您真的想在项目中实现该条件,请添加一个"您的意思是条件。/div>