不时有人在SO上指出char
(也就是"字节")不一定是8位.
似乎8位char
几乎是通用的.我原本认为,对于主流平台,必须有一个8位char
才能确保其在市场上的可行性.
现在和历史上,哪些平台使用的char
不是8位,为什么它们与"普通"8位不同?
在编写代码时,考虑跨平台支持(例如,对于通用库而言),对于非8位平台,值得考虑的是什么char
?
在过去,我遇到过一些char
16位的ADI DSP .我认为DSP是一种利基架构.(然后,当时手工编写的汇编程序很容易击败可用的C编译器可以做的事情,所以我在该平台上没有真正获得C的经验.)
例如,如果一个32位整数溢出,而不是升级int
到long
,如果我们需要一个仅在2 40之内的范围,我们可以使用一些40位类型,这样我们就可以节省24(64-40)位整数?
如果是这样,怎么样?
我必须处理数十亿和空间是一个更大的约束.
为什么所有数据类型大小总是2的幂?
我们举两个例子:
short int 16
char 8
Run Code Online (Sandbox Code Playgroud)
他们为什么不跟随?
short int 12
Run Code Online (Sandbox Code Playgroud) 我已经在库中有64位散列函数(C编码),但我只需要48位.我需要将64位散列值减少到48位值,但它必须以安全的方式才能最小化冲突.
散列函数是一个非常好的64位散列函数.它已经通过SMHasher("DieHarder"哈希测试)进行了测试,并且证明比Murmur2更好.根据我的同事们说,在lib中实现64位散列的算法是xxHash,用SMHasher测试并得到Q.Score为10!对于那些想要看到它的人,xxHash的源代码可以在github.com上找到:github.com/Cyan4973/xxHash/releases/latest.
基本思想是使64位散列值(或其中一部分)中的所有位对产生的48位散列值产生影响.有没有办法做到这一点?
[编辑后期]:
所以我实现了自己的48位(准)-UUID生成器.
请在此处查看完整的工作解决方案(包括源代码):https://stackoverflow.com/a/47895889/4731718.
这个枚举的大小是多少,以字节为单位?C++
enum Cars { Toyota, Suzuki, Volkswa, Mitsubish, Alfarome, Holden, Bradleys };
Run Code Online (Sandbox Code Playgroud)