2022-08-10 15:51:41
今天在学习 ts enum 时,在尝试自定义每项数据关联的数字时,使用了二进制数来表示
enum AnimalFlags {
None = 0,
HasClaws = 1 << 0,
CanFly = 1 << 1
}
~AnimalFlags.HasClaws
这里使用了二进制操作符按位非的方式表达,比如 ~1 的值为 -2,执行过程如下
00000000 00000000 00000000 0000000111111111 11111111 11111111 1111111000000000 00000000 00000000 00000001,注意按位非的反码就是原本数的源码00000000 00000000 00000000 00000010,其值为 2-2同理推断负数的按位非 ~-2 的值,负数要先计算源码
00000000 00000000 00000000 0000001000000000 00000000 00000000 0000000111111111 11111111 11111111 1111111000000000 00000000 00000000 000000011基础知识
源码 -> 反码 -> 反码 + 1 = 补码& | ~ 都是从源码开始的,负数得先计算源码按位非 ~ 计算规律总结:数值加1,符号取反,比如 ~10 === -11, ~-17 === 16