#!/usr/bin/awk -f # rustic awk bitwise integer functions. - A. Costa, Sat Apr 13 2002 function bit_and(a,b, r,n) # bitwise 'and' { r=0 # result n=0 # bit place while (a&&b) { if ( (a*b)%2 ) # both odd? r+=2^n # set bit 'n' a=int(a/2) b=int(b/2) n++ } return r } function bit_or(a,b, r,n) # bitwise inclusive 'or' { r=0 # result n=0 # bit place while (a||b) { if ( a%2 || b%2 ) # either odd? r+=2^n # set bit 'n' a=int(a/2) b=int(b/2) n++ } return r } function bit_xor(a,b, r,n) # bitwise 'xor' { r=0 # result n=0 # bit place while (a||b) { if ( (a+b)%2 ) # only one odd? r+=2^n # set bit 'n' a=int(a/2) b=int(b/2) n++ } return r } function bit_not(a, r,n) # bitwise 'not' { r=0 # result n=0 # bit place while (a) { if ( a%2==0 ) # even? r+=2^n # set bit 'n' a=int(a/2) n++ } return r } BEGIN { x=73 # some test numbers... y=62 printf("x=%d y=%d, x and y=%d, x or y=%d, x xor y=%d, not x=%d, not y=%d\n", x,y,bit_and(x,y), bit_or(x,y), bit_xor(x,y), bit_not(x), bit_not(y) ) }