c++ - int8_t 和 int64_t 的最小值

标签 c++

关于 stdint.h 中的那些定义,我想测试一个转换 int8_t vector 或 int64_t vector 的函数> 到 std::string 的 vector 。

这是我的测试:

TEST(TestAlgorithms, toStringForInt8)
{
    std::vector<int8_t> input = boost::assign::list_of(-128)(0)(127);
    Container container(input);
    EXPECT_TRUE(boost::apply_visitor(ToString(),container) == boost::assign::list_of("-128")("0")("127"));
}

TEST(TestAlgorithms, toStringForInt64)
{
    std::vector<int64_t> input = boost::assign::list_of(-9223372036854775808)(0)(9223372036854775807);
    Container container(input);
    EXPECT_TRUE(boost::apply_visitor(ToString(),container) == boost::assign::list_of("-9223372036854775808")("0")("9223372036854775807"));
}

但是,我在 visual studio 中收到一条警告:

std::vector<int64_t> input = boost::assign::list_of(-9223372036854775808)(0)(9223372036854775807);

如下:

warning C4146: unary minus operator applied to unsigned type, result still unsigned

如果我将 -9223372036854775808 更改为 -9223372036854775807,警告就会消失。

这里有什么问题?关于我的原始代码,测试是通过的。

最佳答案

就像编译器说的那样,-9223372036854775808不是有效数字,因为 -并且数字被分开处理。

你可以试试 -9223372036854775807 - 1或使用 std::numeric_limits<int64_t>::min()相反。

关于c++ - int8_t 和 int64_t 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033201/

相关文章:

c++ - 递增迭代变量背后的直觉?

c++ - 复制构造继承

c++ - 如何在 C++ 中创建动态分配的二维结构数组?

c++ - 交织 EXPECT_CALL() 和对模拟函数的调用

c++ - 返回类型外行定义与声明中的不同

c++ - 为什么 nvcc 对仿函数不满意

c++ - 在重新声明时添加默认参数使此构造函数成为默认构造函数

c++ - 在 Visual Studio 中调试 x64 单元测试

c++ - unsigned 和 signed int 之间的比较(对我来说)似乎是必需的 (c++)

c++ - 学习 Objective C 的先导