[英]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.