【问题标题】:Bits of the primitive type in CC中原始类型的位
【发布时间】:2019-03-06 04:51:41
【问题描述】:

好吧,我开始我的C学习了,剩下的问题是,原始类型的位是如何填充的,例如int类型,例如有4个字节,即32位,最多适合 4294967296。但是,例如,如果我使用一个只占用 1 个字节的值,那么其他位如何保留?

    #include <stdio.h>

    int main(void) {

        int x = 5; // 101 how the rest of the bits are filled
                   // which was not used?
         return 0;
    }

【问题讨论】:

  • 如何填充一个整数而不改变它的值?想想吧。
  • @FeiXiang 理论上,C 中的有符号整数可以包含填充位,以防奇特数字格式(1 的 compl,有符号幅度)。但这种情况甚至不值得思考,因为现实世界的计算机使用 2 的补码。

标签: c bit


【解决方案1】:

所有前导位都将设置为0,否则该值不会是5。有点,在今天的计算机中,只有两种状态,所以如果不是0,那么它就是1,这将导致存储的值不同。所以假设你有 32 位

5 == 0b00000000 00000000 00000000 00000101
5 == 0x00000005

【讨论】:

  • 谢谢,我原以为会是这样,但我怀疑这些位是填充左边还是右边。另一件事,有点超出范围,按位的真正用途是什么?
  • 如果我没记错的话,您对“填充左或右”的疑问取决于系统的字节顺序。按位运算可用于设置二进制标志,至少我是这么看的。
  • @ThuYeinTun 这些位总是填充到最重要的部分。就像十进制一样,我们可以为 7 位数字写 0000123。如果我们在右边写零,那么我们如何区分 123000(即 123)和 123000(即真正的 123000)?在 C 中,我们处理 ,而不是值如何存储在内存中,这就是字节序
【解决方案2】:

剩余的位用0存储。

int a = 356;

现在让我们将其转换为二进制。

 1     0    1     1     0   0   1   0   0

现在你得到 9 位数字。由于 int 分配了 32 位,剩下的 23 位用 0 填充。

所以存储在内存中的值为

         00000000 00000000 00000001 01100100

【讨论】:

  • 我最终接受了上面朋友的回复,因为他先回答了,但也感谢您的回复。
【解决方案3】:

您选择的类型决定了整数的大小,而不是您存储在变量中的值。

如果我们假设int 在您的系统上是 32 位,那么值 5 将表示为 32 位数字。这是0000000000000000000000000101 二进制或0x00000005 十六进制。如果其他位有任何其他值,则不再是 5、32 位大的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多