uint64_t中的唯一值是否也将在int64_t中唯一

ved*_*eda 5 c++ language-lawyer c++11

给定一个具有唯一(std::uint64_t类型)整数的向量,如果我将(std::uint64_t类型)的向量转换为(std::int64_t类型)整数的向量,是否可以保证它是唯一的?

像这样铸造

std::vector<std::uint64_t> unsignedVec;
std::vector<std::int64_t> signedVec( unsignedVec.begin(), unsignedVec.end() );
Run Code Online (Sandbox Code Playgroud)

Hol*_*Cat 8

是否可以保证是唯一的?

形式上它是实现定义的,但是在任何明智的平台上它都应该是唯一的。

(特别是如果提供的话,int64_t 必须是 2的补码。)

从C ++ 20开始,它必须是唯一的。


https://en.cppreference.com/w/cpp/language/implicit_conversion#Numeric_conversions

如果目标类型是带符号的,那么如果源整数可以用目标类型表示,则值不会更改。[否则结果是实现定义的(直到C ++ 20)] [目标类型的唯一值等于模2 n的源值 ,其中n是用于表示目标类型的位数。(自C ++ 20起)。

  • 如果[this](https://en.cppreference.com/w/cpp/types/integer)是正确的,则“ int64_t”是“带符号的整数类型,宽度正好为64位**,没有填充位并且使用负值的2补码**(仅在实现直接支持类型时才提供)”“我们可以假设如果提供了它,则它总是* 2的补码? (3认同)