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 00000001
11111111 11111111 11111111 11111110
00000000 00000000 00000000 00000001
,注意按位非的反码就是原本数的源码00000000 00000000 00000000 00000010
,其值为 2-2
同理推断负数的按位非 ~-2
的值,负数要先计算源码
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110
00000000 00000000 00000000 00000001
1
基础知识
源码 -> 反码 -> 反码 + 1 = 补码
& | ~
都是从源码开始的,负数得先计算源码按位非 ~
计算规律总结:数值加1,符号取反,比如 ~10 === -11
, ~-17 === 16