И, следуя давней традиции, вот версия awk: -)
Последняя проверка на gawk 4.0.1
Должно работать и для других awk.
{
var = _int("00010101",2);
print _bin( or( var , _int("00101001",2) ) , 8 )
print _bin( and( var , _int("10110111",2) ) , 8 )
print _bin( xor( var ,var ) , 8 );
}
# convert var to d-ht base. Specify 16 for hex, 8 for oct, and such. Up to base 36, for fruther base, provide X. if d<=36, and wish to use custom X, provide 1 for i.
function _obase( v , d , X , i, this , r ){
if(d<=9){r="";while(v){r=v%d""r;v=int(v/d)};return r;}
if(d<=36&&!i){for(i=0;i<=9;i++)X[i]=""i;for(;i<d;i++)X[i]=sprintf("%c",55+i);}
r="";while(v){r=X[v%d]""r;v=int(v/d)};return r;
}
function _pad(d, p, w, this ,r){
r=""d;while(length(r)<w)r=p""r;return r;
}
function _bin( v , w , this ){
return _pad(_obase(v,2),"0",w);
}
# convert string to var, using d as base. for base>36, specify X. if wish to use custom X, provide 1 to i
function _int( s , d , X , i , this , k , r ){
r=0;k=length(s);if(d<=9){for(i=1;i<=k;i++){r*=d;r=r+int(substr(s,i,1));}return r;}
if(d<=36&&!i){for(i=0;i<=9;i++)X[""i]=i;for(;i<d;i++)X[sprintf("%c",55+i)]=i;}
for(i=1;i<=k;i++){r*=d;r=r+X[substr(s,i,1)];}eturn r;
}
Функция и () или (), xor () могут отсутствовать в некоторых типах awk.
Если это так, загрузите библиотеку битов. Есть несколько для awk, плавающих в сети.
Или предоставьте свой.