给定一个16位的整数。我必须使用位操作或c ++中的任何其他方法打印它的方块。我试图将该数字作为long int但是它不起作用,因为long int的范围较小比所需的输入。
答案 0 :(得分:2)
您始终可以选择更大的原始数据类型,但通常这只会延迟问题。一旦你想要拿一个很长的正方形,你应该怎么做呢?
如果您需要非常大的数字,则需要更抽象的封装数据表示。 C ++有适合这项工作的工具,Boost库通过Boost.Multiprecision广泛使用它们。具体来说,请查看<boost/multiprecision/cpp_int.hpp>
的文档。它很复杂但功能强大。
答案 1 :(得分:0)
正方形可以完美表示为无符号整数(32位):
#include <iostream>
#include <cstdint>
int main()
{
std::int32_t s = (std::int32_t(1) << 16) - 1;
std::uint32_t u = std::abs(s);
std::uint32_t square = u * u;
std::cout << square << " = " << std::hex << square << '\n';
return 0;
}
如果有符号整数,您将面临溢出并获得负数。