Em bits C, multiplique por 3 e divida por 16
Um amigo meu teve esses quebra-cabeças e esse é o que está me iludindo. Aqui está o problema, você recebe um número e deseja retornar esse número vezes 3 e dividido por 16 arredondando para 0. Deve ser fácil. A pegada? Você só pode usar o! ~ & ^ | + << >> operadores e deles apenas uma combinação de 12.
int mult(int x){
//some code here...
return y;
}
Minha tentativa foi:
int hold = x + x + x;
int hold1 = 8;
hold1 = hold1 & hold;
hold1 = hold1 >> 3;
hold = hold >> 4;
hold = hold + hold1;
return hold;
Mas isso não parece estar funcionando. Eu acho que tenho um problema de perder bits, mas não consigo encontrar uma maneira de salvá-los. Outra perspectiva seria legal. Apenas para adicionar, você também pode usar apenas variáveis do tipo int e sem loops, se instruções ou chamadas de função puderem ser usadas.
Agora eu tenho o número 0xfffffff. Ele deve retornar 0x2ffffff, mas está retornando 0x3000000.