[英]How to manipulate bits in Smalltalk?
我不知道你正在使用哪種方言,但一般來說,你可以訪問Integer的位。 它們被建模為好像表示是雙補碼的,具有無限的位序列。
2 is ....0000000000010
1 is ....0000000000001
0 is ....0000000000000 with infinitely many 0 on the left
-1 is ....1111111111111 with infinitely many 1 on the left
-2 is ....1111111111110
對於LargeIntegers也是如此,即使它們通常被實現為符號幅度(類對符號進行編碼),也將模擬雙補碼。
然后你可以使用bitAnd:bitOr:bitXor:bitInvert bitShift :,以及某些風格的bitAt:put:
您可以使用(2 bitAt:index)訪問位,其中索引從1開始,用於最低有效位,或者增長更高。 如果它丟失了,用bitAnd:和bitShift實現它:...
對於正數,您可以要求高位(2 highBit)的等級。
所有這些操作都應該創建一個新的整數(沒有可能的修改)。
從概念上講,ByteArray是8位(0到255之間)的無符號整數的集合,因此您可以使用它們實現位數組(如果方言中尚不存在)。 或者您可以使用整數(但無法控制無限大小,也不能使用mofifications,操作將花費一份副本)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.