Reversing complemento de dos para 18bit int
Tengo un número entero de 18 bits que está en el complemento de dos y me gustaría convertirlo a un número con signo para poder usarlo mejor. En la plataforma que estoy usando, los ints son de 4 bytes (es decir, 32 bits). Basado en esta publicación:
Convierta el complemento de dos bits sin procesar de 14 bits a un entero de 16 bits firmado
Intenté lo siguiente para convertir el número:
using SomeType = uint64_t;
SomeType largeNum = 0x32020e6ed2006400;
int twosCompNum = (largeNum & 0x3FFFF);
int regularNum = (int) ((twosCompNum << 14) / 8192);
Cambié el número a la izquierda 14 lugares para obtener el bit de signo como el bit más significativo y luego lo dividí por 8192 (en binario, es 1 seguido de 13 ceros) para restaurar la magnitud (como se menciona en la publicación anterior). Sin embargo, esto no parece funcionar para mí. Como ejemplo, ingresar 249344 me da -25600, que prima facie no parece correcto. ¿Qué estoy haciendo mal