int8_t和int64_t的最小值
Smallest values for int8_t and int64_t
对于stdint.h
中的定义,我想测试一个函数,用于将int8_t
的向量或int64_t
的向量转换为std::string
的向量。
以下是我的测试:
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()
代替。
问题是整数字面值不是负的;因此,-42
不是一个带负值的字面值,而是将-
运算符应用于字面值42
。
在这种情况下,9223372036854775808
不在int64_t
的范围内,因此它将被赋予unsigned类型。由于模运算的魔力,你仍然可以否定它,将它赋值给int64_t
,并最终得到你期望的结果;但是编译器会警告你unsigned否定(如果你告诉它),因为这通常是错误的结果。
您可以通过使用std::numeric_limits<int64_t>::min()
来避免警告(并使代码更明显正确)。
将-9223372036854775808
更改为-9223372036854775807-1
。
问题是-9223372036854775808
不是-9223372036854775808
,而是-(9223372036854775808)
和9223372036854775808
不能适合带符号的64位类型(十进制整数常量默认是带符号类型),所以它变成了unsigned。使用-
对unsigned类型应用否定是可疑的,因此发出警告。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 将最小值整数转换为无符号长整型
- 查找 std::vector 中的最小值和最大值 std::p air
- 如何找到每行的最大值和最小值
- 在不进行排序的情况下查找数组中n个最小值的索引