我需要乘以一個數字3/16,舍入爲零只使用按位操作,如! ~ &^| + << >>
。到目前爲止,我有以下幾點,唯一的問題是當數字是負數時它不起作用,它總是舍入而不是零。我知道應該有點按位,如果聲明,如果x是負數然後加15.但我不知道如何實現它,任何幫助表示讚賞。如何乘以三十六分之一
int ezThreeSixteenths(int x) {
int times_two = x << 1;
int times_three = times_two + x;
int divide_eight = times_three >> 4;
int a = 0b11111111;
int a1 = a << 8;
int a2 = a << 16;
int a3 = 0b11111 << 24;
int mask = a | a1 | a2 | a3;
int final = divide_eight & mask;
return final;
}
''4'不除以8,它除以16.注意位移最適合無符號整數。右移有符號數是實現定義的(即符號位可以保留或不可以)。 – Jens
帶有位掩碼的非負int && -ed,只有符號位爲「1」時產生「0」。 – trutheality
檢查此鏈接(http://stackoverflow.com/questions/22077554/in-c-bits-multiply-by-3-and-divide-by-16/22078232#22078232) – LearningC