我正在學習用「C程序設計語言」 C給K & R.我解決了鍛鍊2-7,其中說:K&R練習2-7,優化?
寫一個函數
invert(x,p,n)
,與n
比特開始返回x
在位置p
反轉(即,1變爲0,反之亦然),其餘位保持不變。
這裏是我的代碼(這裏我自願採用字符):
#include <stdio.h>
#define NUMBER 235
#define POSITION 2
#define AMOUNT 4
unsigned invert(unsigned char x, char p, char n)
{
unsigned char bitsToInvert = 0, i;
for (i = 1; i < n; i++) { // Make a number n-bits width, full of 1
bitsToInvert |= 1;
bitsToInvert <<= 1;
}
bitsToInvert |= 1;
bitsToInvert <<= p;
x ^= bitsToInvert;
return x;
}
int main()
{
printf("%d\n", invert(NUMBER, POSITION, AMOUNT));
}
是否有任何優化,我可以把我的代碼?尤其是在for
循環中創建了多少個位? 謝謝!
'2^n - 1'或'(1 << n)-1'會給你最後n位的設置。 :) – SuperSaiyan
你應該至少使用'unsigned chars'。 – Jasen
還有一個練習要求你設置一系列位,這只是一個xor。 – harold