添加后 unsigned long long 给定值错误
Unsigned long long wrong given value after add
我有两个字符串要添加。字符串是十六进制值。我将字符串转换为 long long,添加并在我返回字符串之后。但是这个操作效果不好。
代码:
unsigned long long FirstNum = std::strtoull(FirstString.c_str(), NULL, 16);
unsigned long long SecondNum = std::strtoull(SecondString.c_str(), NULL, 16);
unsigned long long Num = FirstNum + SecondNum;
std::cout << " " << FirstNum << "\n+ " << SecondNum << "\n= " << Num << "\n\n";
我收到了
13285923899203179534
+ 8063907133566997305
= 2903086959060625223
谁能给我解释一下这个魔法?我该如何解决?
通过
返回十六进制值
std::stringstream Stream;
Stream << std::hex << Num;
return Stream.str();
C(和 C++)中的所有无符号算术都对某个 k 取模 2k。在您的情况下,您将得到模 264 的结果,这意味着 unsigned long long 在您的平台上是 64 位。
如果您想对大于平台支持的最大类型的整数进行算术运算,则需要使用多精度库,例如 GMP
我有两个字符串要添加。字符串是十六进制值。我将字符串转换为 long long,添加并在我返回字符串之后。但是这个操作效果不好。
代码:
unsigned long long FirstNum = std::strtoull(FirstString.c_str(), NULL, 16);
unsigned long long SecondNum = std::strtoull(SecondString.c_str(), NULL, 16);
unsigned long long Num = FirstNum + SecondNum;
std::cout << " " << FirstNum << "\n+ " << SecondNum << "\n= " << Num << "\n\n";
我收到了
13285923899203179534
+ 8063907133566997305
= 2903086959060625223
谁能给我解释一下这个魔法?我该如何解决?
通过
返回十六进制值std::stringstream Stream;
Stream << std::hex << Num;
return Stream.str();
C(和 C++)中的所有无符号算术都对某个 k 取模 2k。在您的情况下,您将得到模 264 的结果,这意味着 unsigned long long 在您的平台上是 64 位。
如果您想对大于平台支持的最大类型的整数进行算术运算,则需要使用多精度库,例如 GMP