Two’s complement is the most common way to represent signed numbers in fixed-point integer operations. Here is a simple implementation in C++ to convert from C++ signed integer to N-bit two’s complement value.

#include <iostream>

template<int N>
int to_twos_complement(int x) {
return (x < 0) ? ((~abs(x) + 1) & ((1<<N)-1)) : x;
}

template<int N>
int from_twos_complement(int x) {
return (x & (1<<(N-1))) ? (~(x-1) & ((1<<N)-1)) : x;
}

int main()
{
int x = -1;
int y = to_twos_complement<8>(x);
int z = from_twos_complement<8>(y);

std::cout << x << std::endl;  // = -1
std::cout << y << std::endl;  // = 255
std::cout << z << std::endl;  // = 1
}