如何在任何编译器中实现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 中实现后退按钮