#include #include void stampanje_bitova(unsigned x) { unsigned vel = sizeof(unsigned)*8; unsigned maska; for(maska = 1 << (vel-1); maska; maska >>= 1) putchar(x & maska ? '1' : '0'); putchar('\n'); } unsigned int razmena(unsigned int x, int i, int j) { if(i == j) return x; unsigned xor_i, xor_j; unsigned maska = ~(~0 << 8); // maska = 0000 ... 0000 1111 1111 int i_ti_bajt, j_ti_bajt; i_ti_bajt = (x & (maska << (i-1)*8)) >> (i-1)*8; maska = ~(~0 << 8); j_ti_bajt = (x & (maska << (j-1)*8)) >> (j-1)*8; if(i_ti_bajt == j_ti_bajt) return x; xor_i = xor_j = i_ti_bajt ^ j_ti_bajt; maska = (xor_i << (i-1)*8) | (xor_j << (j-1)*8); return x ^ maska; } int main(int argc, char** argv) { if(argc != 3) { printf("Nedozvoljen broj argumenata.\n"); return 1; } unsigned int x, x_novo; int i,j; i = atoi(argv[1]); if(i<1 || i>4) { printf("Nedozvoljen izbor i-tog bajta: 1<=i<=4\n"); return 1; } j = atoi(argv[2]); if(j<1 || j>4) { printf("Nedozvoljen izbor j-tog bajta: 1<=j<=4\n"); return 1; } scanf("%u", &x); stampanje_bitova(x); x_novo = razmena(x,i,j); printf("%u\n", x_novo); stampanje_bitova(x_novo); return 0; }