#include <cstdint>
#include <bitset>
#include <iostream>

template<class T> 
auto as_unsigned(T t) 
{ 
    return std::make_unsigned_t<T>(t); 
}

int main(int argc, char** argv) 
{
    auto sx = int32_t{ -55 };
    auto ux = as_unsigned(sx);

    auto sxBits = std::bitset<sizeof(sx) * 8>(sx);
    auto uxBits = std::bitset<sizeof(ux) * 8>(ux);

    std::cout << "sx = " << sx << std::endl;
    std::cout << "sx bits: " << sxBits << std::endl;

    std::cout << "ux = " << ux << std::endl;
    std::cout << "ux bits: " << uxBits << std::endl;
    
    return 0;
}