많은 문제가 있으며 많은 최적화 방법을 찾을 수 없습니다.5/8 비트 씩 곱하기 오버플로 관찰
목표는 0을 향해 반올림하여 오버플로를 방지하는 것입니다. 작업 순서에 5를 곱한 다음 8로 나눈 값 (즉, 11 * 5/8 = 6)입니다. 최적화의 목표는 12 개 이하의 연산자를 사용하는 것입니다.
규정은 단지! ~ &^| + < < >> 연산과 8 비트 int가 허용됩니다. 솔루션에서
나의 현재 시도는 14 개 작업에 오면
int trueFiveEighths (int x){
int rightOne = x >>1;
int rightTwo = x >>2;
int temp = (x &(rightTwo) &1) + (((x ^(rightTwo))|(rightOne)|x)&(x>>31)&1);
return (x>>3) + (rightOne) + temp;
}
입니다. 더 이상 통신 사업자를 면도 할 수있는 방법이 없으며 다른 방법을 찾아 낼 수 없습니다. 오에 의해 곱
int const rem = x & 7;
각 :
int const eights = x >> 3;
가 나머지를 얻을 :
eights += eights << 2;
rem += rem << 2;
을하고 새로운 wholes의 추가
괄호 연산자입니다 (게임 보이/GBC) 내장 승수를하지 않았다 나는 시스템에서 돌아 오는 길에 기계에 사용했던 코드입니다 –
나는 그들이 체커에 의해 계산되지 않았기 때문에 그들이 허용된다고 생각한다. – Falderol
@ M.M : 분명히이 목적을 위해 아닙니다. – Ryan