33 lines
675 B
C
33 lines
675 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "02-bitwise.h"
|
|
|
|
unsigned invert(unsigned x, int p, int n);
|
|
|
|
/* parse command line args for invert, print result */
|
|
int main(int argc, char *argv[])
|
|
{
|
|
if (argc < 4) {
|
|
printf("error : expected 3 arguments x p n\n");
|
|
return 1;
|
|
}
|
|
unsigned x;
|
|
int bx = int_of_string(&x, argv[1]);
|
|
int p = atoi(argv[2]);
|
|
int n = atoi(argv[3]);
|
|
|
|
if (!bx) {
|
|
return 2;
|
|
}
|
|
|
|
printd_base(bx, invert(x, p, n));
|
|
putchar('\n');
|
|
return 0;
|
|
}
|
|
|
|
/* invert: invert n bits of x at positon p (right adjusted) */
|
|
unsigned invert(unsigned x, int p, int n)
|
|
{
|
|
return x ^ (~(~0 << n) << (p-n+1));
|
|
}
|