invertendo o complemento de dois para 18bit int
Eu tenho um número inteiro de 18 bits que está no complemento de dois e gostaria de convertê-lo em um número assinado para que eu possa usá-lo melhor. Na plataforma que estou usando, as entradas são de 4 bytes (ou seja, 32 bits). Com base neste post:
Converter o complemento bruto de dois bits de 14 bits em número inteiro assinado de 16 bits
Eu tentei o seguinte para converter o número:
using SomeType = uint64_t;
SomeType largeNum = 0x32020e6ed2006400;
int twosCompNum = (largeNum & 0x3FFFF);
int regularNum = (int) ((twosCompNum << 14) / 8192);
Eu mudei o número para a esquerda 14 lugares para obter o bit de sinal como o bit mais significativo e, em seguida, divida por 8192 (em binário, é 1 seguido por 13 zeros) para restaurar a magnitude (conforme mencionado no post acima). No entanto, isso não parece funcionar para mim. Como exemplo, a inserção de 249344 me dá -25600, que prima facie não parece correto. O que estou fazendo errado?