Typecasted signed int转换为unsigned int

时间:2013-12-05 06:56:05

标签: c++ casting

我有一个输出值的程序,称之为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 无符号整数。

我哪里错了?

1 个答案:

答案 0 :(得分:5)

在unsigned + signed,unsigned wins中。 (int) energy_base2*total_sites转换为unsigned int,以便添加{{1}}。