我想创建一个多态函数,将 8、16、32 位字转换为 64 位字。我该怎么做?
更新1
在基础库中,所有单词结构都具有功能toLarge
并fromLarge
可以转换为LargeWord
,据我所知,这只是 Word32 的同义词。
更新2
根据规范,字长必须是 2 的幂,但在 SML/NJ 我有
Standard ML of New Jersey v110.84 [built: Mon Dec 03 10:23:14 2018]
- Word.wordSize;
val it = 31 : int
- Word32.wordSize;
val it = 32 : int
- Word.toLarge;
val it = fn : word -> Word32.word
> LargeWord.wordSize;
val it = 32 : int
在 PolyML 中
Poly/ML 5.7.1 Release
> Word.wordSize;
val it = 63: int
> Word64.wordSize;
val it = 64: int
> Word.toLarge;
val it = fn: word -> ?.word
> LargeWord.wordSize;
val it = 64: int
那个怎么样?为什么Word.wordSize
不是二的幂?为什么Word
这些 SML 实现中的表示不同?
更新3
实际上,我希望能够使用 (<<) 运算符将较小的单词“提升”为较大的单词,但无法弄清楚如何去做。
更新4
似乎Word
并LargeWord
取决于架构并代表一个机器字。因为 SML/NJ 不支持 64 位 arch,所以它有不同的字长。