首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存空间对位移位有什么影响?

内存空间对位移位有什么影响?
EN

Software Engineering用户
提问于 2019-03-18 20:20:43
回答 2查看 482关注 0票数 2

确实,按位左移操作(shl)使正在移位的整数的值加倍。然而,当限制在一个有限的空间,例如8位,左移位将开始推开高次字位,并将造成损失。这个损失对数字有什么数学影响?它是否以某种方式抵消了换档的倍增效应?

相关操作是旋转左操作(rol),在该操作中不发生此损失。

EN

回答 2

Software Engineering用户

发布于 2019-03-18 20:41:03

按位转换是一个非常基本的实现。确实,它使无符号整数的值加倍。但对于其他类型的数据来说,情况并非如此。例如,在二补的情况下,它可以改变数字的符号和值。如果字节值表示ascii字符,则向左移动将“(0100000)”转换为“@”(1000000)。

唯一随移位量增加而发生变化的是,有多少位要移动(很明显),最后一个位置可以移动到哪个位置。这取决于语言和/或指令集。例如,在Java中,32位和64位架构之间的左移行为没有区别。它被定义为语言规范的一部分,并且不因其运行的机器的体系结构而变化。

票数 2
EN

Software Engineering用户

发布于 2019-03-19 10:30:36

如果我们假设数据被处理为一个无符号数,则结果是一个加倍,但在模算法下。所以

代码语言:javascript
复制
y = (2x) modulo N

对于一个8位数,这将是模2到功率8,或模256。对于16位数,它将是模65536。

模N算法可以被认为是实现“如果结果大于或等于N,保持减去N直到结果小于N”的规则。

对于8位的情况:

代码语言:javascript
复制
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的补充。有些处理器甚至对有符号数字和无符号数字有不同的左移位实现。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/388826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档