В настоящее время я изучаю C с помощью "The C Programming Language" от K&R. Я решил упражнение 2-7, в котором говорится:
Напишите функцию
invert(x,p,n)
, которая возвращаетx
с битамиn
, которые начинаются с позиции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
, который создает количество n
1 бит? Спасибо!
2^n - 1
или(1<<n) -1
предоставят вам последние n битов. :) - person UltraInstinct   schedule 26.12.2014unsigned chars
. - person Jasen   schedule 26.12.2014