我面临一个问题,需要将有符号整数转换为无符号整数,保留它们的范围和顺序。
给定以下定义:
如何最快且正确地将有符号整数类型 T 的范围 [MIN(T), MAX(T)] 映射到无符号整数类型 U 的范围 [0, MAX(U)]?
其中: - T 是一个有符号整数类型 - U 是一个无符号整数类型 - sizeof(T) == sizeof(U)
我尝试了各种位操作和数字方法来解决这个问题,但都没有成功。
给定以下定义:
#include <limits>
#define MIN(X) std::numeric_limits<X>::min();
#define MAX(X) std::numeric_limits<X>::max();
如何最快且正确地将有符号整数类型 T 的范围 [MIN(T), MAX(T)] 映射到无符号整数类型 U 的范围 [0, MAX(U)]?
其中: - T 是一个有符号整数类型 - U 是一个无符号整数类型 - sizeof(T) == sizeof(U)
我尝试了各种位操作和数字方法来解决这个问题,但都没有成功。
-1
变成什么呢?你是想保留范围但不保留实际值吗?另外,哪些“各种方法”对你没有起作用?它们为什么没能成功?(在这种情况下,“未成功”是什么意思?)请就具体方法提出具体问题。 - Lightness Races in Orbit