Considerate questo codice:Il risultato delle operazioni bit a bit sui tipi di integrale firmato è ben definito?
using integer = int; // or any other fundamental integral type
using unsigned_integer = typename std::make_unsigned<integer>::type;
constexpr integer bits = std::numeric_limits<unsigned_integer>::digits;
integer value = -42; // or any value
integer mask = static_cast<integer>(1)<<static_cast<integer>(bits-1);
bool result_and = value & mask;
bool result_or = value | mask;
bool result_xor = value^mask;
mi chiedo quanto bene sono queste operazioni definite secondo lo standard. Ho la garanzia di finire con gli stessi risultati su tutte le architetture? Sono sicuro di operare sul bit di segno su tutte le architetture in cui questo bit di segno è 0
per i numeri positivi e 1
per i numeri negativi?
Vedere anche [Qual è il risultato di a & b?] (Http://stackoverflow.com/q/29394518/1708801) che è strettamente correlato ma non un duplicato. –