确实,按位左移操作(shl)使正在移位的整数的值加倍。然而,当限制在一个有限的空间,例如8位,左移位将开始推开高次字位,并将造成损失。这个损失对数字有什么数学影响?它是否以某种方式抵消了换档的倍增效应?
相关操作是旋转左操作(rol),在该操作中不发生此损失。
发布于 2019-03-18 20:41:03
按位转换是一个非常基本的实现。确实,它使无符号整数的值加倍。但对于其他类型的数据来说,情况并非如此。例如,在二补的情况下,它可以改变数字的符号和值。如果字节值表示ascii字符,则向左移动将“(0100000)”转换为“@”(1000000)。
唯一随移位量增加而发生变化的是,有多少位要移动(很明显),最后一个位置可以移动到哪个位置。这取决于语言和/或指令集。例如,在Java中,32位和64位架构之间的左移行为没有区别。它被定义为语言规范的一部分,并且不因其运行的机器的体系结构而变化。
发布于 2019-03-19 10:30:36
如果我们假设数据被处理为一个无符号数,则结果是一个加倍,但在模算法下。所以
y = (2x) modulo N对于一个8位数,这将是模2到功率8,或模256。对于16位数,它将是模65536。
模N算法可以被认为是实现“如果结果大于或等于N,保持减去N直到结果小于N”的规则。
对于8位的情况:
1 shifted left gives (2 modulo 256) = 2.
65 shifted left gives (130 modulo 256) = 130.
129 shifted left gives (258 modulo 256) = 2.对于超过一个地方的轮班,你可以保持加倍,并在最后应用模块。或者在每一步之后继续做双级然后模组。事情也是一样的。
所有这一切都变得复杂的签名算术。在处理器使用的任何签名约定中,你必须解释数字,通常是2's的补充。有些处理器甚至对有符号数字和无符号数字有不同的左移位实现。
https://softwareengineering.stackexchange.com/questions/388826
复制相似问题