如何在任何编译器中实现int?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在任何编译器中实现int?相关的知识,希望对你有一定的参考价值。

在64位处理器中,一次处理64位数据。因此,当要执行任何算术运算时,它在ALU中使用也是64位的ACCUMULATOR完成。

但在大多数情况下,int的大小超过2个字节。如何实现2字节int(算术运算)?

答案

当然,基本思想是二进制数。但是有许多细节使事情复杂化。这取决于硬件和编译器。

我在这里提到的每种方式都使用了代表整数的编译器。

表示事物的一种可能方法就是制作最大的二进制整数。使用64位,然后将一位返回到符号,你得到的功率为64减去1或略高于1.8 x 10 ^ 19。

如果你想做加减,这没关系。但是乘法很繁琐,因为你需要为每个位做一次乘法运算。浮动协处理器可以帮助您。

一些硬件将支持有趣的功能,因此利用它是有用的。例如,一些CPU芯片将支持二进制编码的十进制。

https://en.wikipedia.org/wiki/Binary-coded_decimal

如果你的年龄足以记住Z80,它就是我用过的第一台拥有BCD的CPU。

https://en.wikipedia.org/wiki/Zilog_Z80

这意味着您只需要在4位级别执行二进制操作,因为十进制数的每个数字都与其他数字分开。如果硬件直接支持它,那么你可以避免编写代码来转换整数和十进制之间的所有64位。它效率不高。使用64位,并为符号丢弃一个,您只得到15位数。

再次,加减是很容易的。乘法成为实现二进制数字逐位乘法的问题,然后包括结果的进位超过10。

不同的硬件将支持不同的东西。有big-endian和little-endian的问题。

https://chortle.ccsu.edu/AssemblyTutorial/Chapter-15/ass15_3.html

在深奥的硬件上还有很多其他的可能性。

以上是关于如何在任何编译器中实现int?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用对象列表在片段中实现newinstace模式[重复]

Android Studio:如何从 Fragment 在 ActionBar 中实现后退按钮

尝试在片段中实现 OnClick 侦听器 [重复]

如何在 Fragments 中实现 onBackPressed()?

在片段中实现对话框时,必须在添加内容之前请求窗口功能

在片段中实现 onClickListener