C++ c++;:正在打印一份wierd文件
这是我的密码:C++ c++;:正在打印一份wierd文件,c++,C++,这是我的密码: long base2(int number) { long result = 0; int num = number; int multi = 1; int rem; while(num > 0) { rem = num % 2; result = result + (rem * multi); num = num / 2; multi = multi * 10; } return result
long base2(int number)
{
long result = 0;
int num = number;
int multi = 1;
int rem;
while(num > 0)
{
rem = num % 2;
result = result + (rem * multi);
num = num / 2;
multi = multi * 10;
}
return result;
}
我得到一个奇怪的打印:-1884801888
我正确地运行了调试器及其计算,但就在最后,最终答案更改为-1884801888
[打印发生在主屏幕上,我检查过,这里的数字变为-1884801888
]
谢谢大家! 在当今最常见的平台上,
int
和long
都是32位宽。您正在导致整数溢出,您正在计算的值超出了有符号32位整数中可表示的范围
如果值不适合32位,但适合63位或64位,则可以使用
long-long
或unsigned-long
(或
中的固定宽度类型int64\t
或uint64\t
)数据类型来存储结果。如果这些数字不够大,则需要使用更复杂的解决方案(例如,GMP库支持任意大小的整数),但这只是最后的手段。看起来您试图获取一个数字,并通过首先将其转换为十进制编码的二进制来打印其二进制表示形式。无需转换,数字已在内部存储为一组0和1。事实上,打印出来需要经过一些处理才能打印成十进制数
以下是如何以几种不同的方式打印数字:
const int foo = 17;
std::bitset<sizeof(foo)*8> b(foo);
std::cout << "Decimal: " << foo
<< "\nHex: " << std::hex << foo
<< "\nOctal: " << std::oct << foo
<< "\nBinary: " << b << std::endl;
const int foo=17;
std::位集b(foo);
std::coutmulti=multi*10代码>最终走出了<代码> int /代码>范围?也许我是C++的新手(来自java),我知道我必须在这里维护内存。但在哪里?!没有数组或其他我必须处理的东西。。。我必须从内存中删除一些东西吗?代码看起来是正确的。如何调用函数以及如何打印结果?也可能是它的整数溢出,如果你处理大的数字…@YakirYehuda整数溢出。您正在尝试存储一个大于整数的值,该值可以更改为长且答案仍然相同。