You can also do this with XOR and bit masking.
#include <stdio.h> void f(unsigned val, unsigned ary[3]) { ary[0] = val; ary[1] = (ary[0] ^ 1) & 1; ary[2] = (ary[0] ^ 2) & 2; } int main() { unsigned ary[3] = {0}; f(0, ary); printf("f(0) = %d %d %d\n", ary[0], ary[1], ary[2]); f(1, ary); printf("f(1) = %d %d %d\n", ary[0], ary[1], ary[2]); f(2, ary); printf("f(2) = %d %d %d\n", ary[0], ary[1], ary[2]); return 0; }
This will print:
f(0) = 0 1 2 f(1) = 1 0 2 f(2) = 2 1 0
source share