我有一个输出值的程序,称之为x
,可以是任何数字类型。当我将x
标记为(int)x
时,对于正数,它可以正常工作,但对于负数,它似乎被视为无符号。 (做模数INT_MAX +1)。
我将它用作数组索引,突然间我收到了很多“out_of_range”错误,所以我插入了一些printfs并将x作为整数,我把它作为输出:
Before: 44 After: 44
Before: -60 After: 4294967236
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Aborted (core dumped)
使用命令:
std::cout << "Before: " << 2*total_sites + energy_base << "\tAfter: " << 2*total_sites + (int)energy_base << std::endl;
其中energy_base
是我在我的例子中使用的“x”。
energy_base本身被定义为double,但是它是从一个函数生成的(对于这个例子),我已经限制为“整数”值。对于上下文,total_sites 是无符号整数。
我哪里错了?
答案 0 :(得分:5)
在unsigned + signed,unsigned wins中。 (int) energy_base
将2*total_sites
转换为unsigned int,以便添加{{1}}。