对C中数字的值和数字的范围感到困惑

Confused about the value of a number and the range of the number in C

我错过了我的讲座,我不明白最后两点。有人可以解释第三点并告诉我如何计算第四点吗?谢谢

The value of a number is the sum of the values of the bit positions containing 1.

如果将一个数从二进制转换为十进制,则必须继续将位值乘以 2^(位置值 - 1) //[假设位置值从最右边的 1 开始]并求和该值与以这种方式获得的先前值。

因此,如果该位为 0,则无论位的位置如何,结果都必须为 0。因此,它不会为数字增加任何值。只有具有 1 的位才计入该值。

What range of numbers can be represented in an unsigned integer type with : 4 bits, 8 bits, 16 bits, 32 bits, n bits?

对于n bits的无符号整数,表示的整数可以是0到(2^n)-1。

So, 4 bits can represent numbers from 0 to (2^4) - 1 = 15.
8 bits can represent numbers from 0 to (2^8) - 1 = 255.
16 bits can represent numbers from 0 to (2^16) - 1 = 65,535.
32 bits can represent numbers from 0 to (2^32) - 1 = 4,294,967,295.

以此类推

第3点:参考上面的table,二进制值00010001代表十进制16 + 1 = 17.

第4点:n位的无符号二进制数可以表示范围02**n - 1,意思是(2的n次方)-1。

再参考table,所有位都设置的4位二进制数表示8 + 4 + 2 + 1 = 15,也就是2**4 - 1