再次,关于 C++ 和有符号 -> 无符号(相同大小)转换/转换。
C++ 标准 4.7/2 规定:
如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模 2n,其中 n 是用于表示无符号类型的位数)。[注意:在二进制补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断)。]
好的,以二进制补码表示static_cast并std::bit_cast产生相同的位模式。
是否有任何理由static_cast<unsigned>(signed)在一个补码或有符号幅度表示中更改位模式?
可static_cast<unsigned>(signed)总是产生在位模式二进制补码表示,由于“模数2 ^ N ...”(与unsigned x = -1总产111..1位模式)?