为什么有些枚举类型要用 2 的 n 次方存储?

2020-01-15 20:53:01 +08:00
 beexu

仅仅是为了位运算时方便吗

3773 次点击
所在节点    编程
8 条回复
ipwx
2020-01-15 20:54:28 +08:00
1、我猜楼主说的是 flag 类型而不是单纯的枚举类型。
2、因为 2^k 是正交的啊。。。
ipwx
2020-01-15 20:54:57 +08:00
正交:x[i] & x[j] = 1 当且仅当 i == j
ipwx
2020-01-15 20:55:48 +08:00
好吧错了,x[i] & x[j] != 0 当且仅当 i == j
entimm
2020-01-15 21:05:04 +08:00
这种方便在数据库中只使用一个字段存储多个数值属于混合值
EminemW
2020-01-15 21:16:11 +08:00
这样用一个二进制位就能存了,省很多内存
k9982874
2020-01-15 21:25:51 +08:00
内存对齐
billlee
2020-01-15 22:15:24 +08:00
不要当成是一个 2^n 整数,它是一个放在第 n 位上的 bit. 一个 bit 就足够表示 true/false 了,需要保存很多开关的时候常用这种方法。
Justin13
2020-01-15 22:52:06 +08:00
为了支持枚举值之间的位运算,便于使用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX