Skip to content
On this page

其他

一些无法分类的小杂项

二进制

进制代表的是不往前进可以表示最大的数字

对于 10 进制来说, 数字 10 中的 1 代表的是已经够 10个数字了(0-9),需要前进1, 后面跟着 的 0 代表还没开始计数,就像算盘中的 满 5 进 1

对于 2 进制来说, 只有 0 / 1 两个状态,再往前需要前进一位

二进制的最大优点:位运算。

pqp 与 qp 或 q
0000
1001
0101
1111

p 与 q 等于取交集,全部为 1 才为 1;p 或 q 等于取并集,全部为 0 才为 0

js
100011=000, 100011=111

给定一个数 n,怎么判断 n 是不是 2 的 n 次方呢?

如果一个数是 2 的 n 次方 ,那么这个数字必须 第一位 是 1,因为有进位

java
public boolean isPowerOfTwo(int n) {
    return (n>0) && ((n & (n - 1)) == 0);
}

我们知道,10 的 n 次方最高位是 1,其他位都是 0;2 的 n 次方也是同理。

也就是说:如果一个数 a 是 2 的 n 次方,那么 a 的最高位就是 1,其他位全是 0;那么,a-1 呢,就变成高位是 0,其他位全是 1 了。

我们将 8 位二进制称作一个字节,也就是 1byte,也就是: 1byte = 8bit,也就是 8 个二进制位;因为最高位要用来表示符号位,所以,1 个 byte 的大小范围就是 [−2^7, 2^7 − 1]。

负数范围为 −2^7 到 -1, 一共有 2^7, 正数范围为 1 - 2^7,共有 2^7 - 1,一共有 2^7 - 1 个。0 呢?0 的符号位是 0,也算是正数,所以正数应该是:0 ~ 2^7,也是 2^7 个,跟负数总数是一样的。

因为有一个符号位 -0+0 只算一个,所以要减去 1