(phixonline)--> -- demo\rosetta\Bitwise_operations.exw with javascript_semantics enum SHL, SAR, SHR, ROL, ROR function bitop(atom a, integer b, integer op) atom res if op=SHL then -- Note: Phix doesn't quietly discard high bits... res = and_bitsu(a << b,#FFFF_FFFF) elsif op=SAR then -- Note: Phix doesn't really do "unsigned numbers", -- Should you want to treat 4G-1 as -1 then: if a>#7FFF_FFFF then a -= #1_0000_0000 end if res = and_bitsu(a >> b,#FFFF_FFFF) elsif op=SHR then res = and_bitsu(a >> b,#FFFF_FFFF) elsif op=ROL then return or_bitsu(a >> 32-b, and_bits(a << b,#FFFF_FFFF)) elsif op=ROR then return or_bitsu(a >> b, and_bits(a << 32-b,#FFFF_FFFF)) else ?9/0 end if return res end function procedure bitwise(atom a, atom b) printf(1,"and_bits(%b,%b) = %032b\n",{a,b,and_bitsu(a,b)}) printf(1," or_bits(%b,%b) = %032b\n",{a,b, or_bitsu(a,b)}) printf(1,"xor_bits(%b,%b) = %032b\n",{a,b,xor_bitsu(a,b)}) printf(1,"not_bits(%b) = %032b\n",{a,not_bitsu(a)}) printf(1," shl(%b,%b) = %032b\n",{a,b,bitop(a,b,SHL)}) printf(1," sar(%b,%b) = %032b\n",{a,b,bitop(a,b,SAR)}) printf(1," shr(%b,%b) = %032b\n",{a,b,bitop(a,b,SHR)}) printf(1," rol(%b,%b) = %032b\n",{a,b,bitop(a,b,ROL)}) printf(1," ror(%b,%b) = %032b\n",{a,b,bitop(a,b,ROR)}) end procedure bitwise(0x800000FE,7)