Bitwise operations: Difference between revisions
Content added Content deleted
(added standard ml) |
|||
Line 650: | Line 650: | ||
]. |
]. |
||
testBitFunc value: 16r7F value: 4 .</lang> |
testBitFunc value: 16r7F value: 4 .</lang> |
||
=={{header|Standard ML}}== |
|||
For integers, IntInfs provide bitwise operations: |
|||
<lang sml>fun bitwise_ints (a, b) = ( |
|||
print ("a and b: " ^ IntInf.toString (IntInf.andb (IntInf.fromInt a, IntInf.fromInt b)) ^ "\n"); |
|||
print ("a or b: " ^ IntInf.toString (IntInf.orb (IntInf.fromInt a, IntInf.fromInt b)) ^ "\n"); |
|||
print ("a xor b: " ^ IntInf.toString (IntInf.xorb (IntInf.fromInt a, IntInf.fromInt b)) ^ "\n"); |
|||
print ("not a: " ^ IntInf.toString (IntInf.notb (IntInf.fromInt a )) ^ "\n"); |
|||
print ("a lsl b: " ^ IntInf.toString (IntInf.<< (IntInf.fromInt a, Word.fromInt b )) ^ "\n"); (* left shift *) |
|||
print ("a asr b: " ^ IntInf.toString (IntInf.~>> (IntInf.fromInt a, Word.fromInt b )) ^ "\n") (* arithmetic right shift *) |
|||
)</lang> |
|||
More shifts are available for words (unsigned ints): |
|||
<lang sml>fun bitwise_words (a, b) = ( |
|||
print ("a and b: " ^ Word.fmt StringCvt.DEC (Word.andb (a, b)) ^ "\n"); |
|||
print ("a or b: " ^ Word.fmt StringCvt.DEC (Word.orb (a, b)) ^ "\n"); |
|||
print ("a xor b: " ^ Word.fmt StringCvt.DEC (Word.xorb (a, b)) ^ "\n"); |
|||
print ("not a: " ^ Word.fmt StringCvt.DEC (Word.notb a ) ^ "\n"); |
|||
print ("a lsl b: " ^ Word.fmt StringCvt.DEC (Word.<< (a, b) ) ^ "\n"); (* left shift *) |
|||
print ("a asr b: " ^ Word.fmt StringCvt.DEC (Word.~>> (a, b) ) ^ "\n"); (* arithmetic right shift *) |
|||
print ("a asr b: " ^ Word.fmt StringCvt.DEC (Word.>> (a, b) ) ^ "\n") (* logical right shift *) |
|||
)</lang> |
|||
=={{header|Visual Basic .NET}}== |
=={{header|Visual Basic .NET}}== |