[英]Typecasted signed int converting like unsigned int
我有一个输出值的程序,称它为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 是一个无符号整数。
我要去哪里错了?
在无符号+有符号的情况下,无符号获胜。 (int) energy_base
转换为unsigned int,用于使用2*total_sites
进行加法2*total_sites
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.