类型大小与其值范围之间的关系?

relation between size of types and their range of values?

本文关键字:之间 关系 范围 类型      更新时间:2023-10-16

在 C++ 或任何其他语言中,类型的大小和它们采用的值范围之间的关系是什么? 例如 - char 有 1 个字节大小,这意味着没有。它可以存储的值为 2^8。 那么为什么它只能取 -128 到 127 之间的值,为什么不能取更大的值。 它与位模式有关吗? 还是我误解了这件事。我是编程新手,我很快就掌握了这些概念,但我被困在这个概念中!! 请解释一下与浮点类型相关的内容!!提前致谢

从状态数量的基本概念开始。位有两种状态 -01.两位有四种可能的状态:00011011。对于三位,状态数为八:

000 001 010 011 100 101 110 111

现在应该会出现这种模式:添加额外的位会使一组位可以采用的状态数量增加一倍。这很容易看出:如果k位的状态数是N,那么对于k+1位,当添加的位被0时有N状态,当它被1N更多的状态,或者完全N+N。因此,k位可以有 2k个状态。

字节是 8 位的组,因此一个字节可以具有的状态数为 2k,即 256。如果使用字节表示无符号值,则其范围将为 0..255(含(。对于有符号值,取一个位来表示符号。在 2 的补码表示中,值范围变为 -128..127。负值允许一个额外的值,因为范围的非负部分包括零,而范围的负部分没有零。

它简单的数据类型变量具有2^(sizeof(datatype) * CHAR_BIT)值。现在取决于此数据类型是signed还是unsigned.

signed具有0 .. ((2^(sizeof(datatype) * CHAR_BIT))-1)值。

unsigned具有-((2^(sizeof(datatype) * CHAR_BIT))/2) .. +((2^(sizeof(datatype) * CHAR_BIT)/2)-1)值。


字符数据类型

2^8256

哪里

-128..127具有256

对于signed charunsigned char有范围

0..255,仍然256值。


字节是 8 位的序列。

+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

最高位(以小位字节序表示值是0 - positive还是1 - negative,其余位表示值。

然后你有

+---+---+---+---+---+---+---+---+
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |    < Max positive number
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |    < Max negative number
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

零的 becouse 数通常用 2 的补码表示。

从二的补码转换如下

1. Invert all bits -> |0|1|1|1|1|1|1|1| ->  127
2. Add 1           -> |1|0|0|0|0|0|0|0| ->  128
3. Change sign     ->                   -> -128