gpt4 book ai didi

c - C Primer Plus 6th 中的 C 中的数据类型

转载 作者:行者123 更新时间:2023-12-04 10:55:26 24 4
gpt4 key购买 nike

世界。
我是 CS 方面的新手,正在通过“C Primer Plus”一书学习 C。
第 3 章末尾有复习题,我对他们的一些答案感到困惑。
我想通过我对它们的理解来澄清。请纠正我并分享您的一些知识。

所以这是下面书中的问题,然后是我的问题。

6. 确定以下每个常量的数据类型(在声明语句中使用)和 printf() 格式说明符:
常量类型说明符
-一种。 12 整数 %d
-b. 0X3 无符号整数 %#x
...
-d。 2.34E07 双%e
-e. '\040' char(rlly int) %c
-F。 7.0 双%f
...

7. 与问题 6 相同,但假设为 16 位 int:
常量类型说明符
-一种。 012 无符号整数 %#o
...
-d。 100000 长 %ld
...
-G。 0x44 无符号整数 %d

我的问题:

  • 关于 6-a & 7-a,在 12 位前加 0 如何需要 unsigned int 在 16 位 int 系统中有更多的正空间? 12 是二进制的 1100。 012 在数学上是一样的,但在计算上有什么不同吗?
  • 关于 6-b 和 7-g,十六进制格式怎么有 unsigned int? 0X3和0x44分别是二进制的11和1000100,十进制的3和68。 16 位整数的可能值范围从 -32,768 到 32,767,但在答案中两者都是 unsigned int。
  • 关于 6-d,我在书中读到 C 标准规定浮点数必须能够表示至少六个有效数字。这里 2.34E07 有更多,所以加倍。但也从书中,默认情况下,编译器假定浮点常量是 double 的。此默认规则仅适用于常量吗?分配变量时是否需要具体?
  • 关于 6-f,7.0 怎么翻倍?是不是因为编译器假定浮点常量是 double 的?对于变量,我应该使用 float 之类的 float f = 7.0; ?
  • 关于 7-d,长类型(保证 32 位)是否有更多的空间容纳 100,000?但我们必须假设 16 位 int 系统,它在 0 到 65,535 之间以无符号表示形式存在。具有 16 位 int 系统的计算机如何处理超出其能力的范围?

  • 请随意撕碎我,粉碎我对 C 中数据类型的理解并教我。

    最佳答案

  • 除了二进制之外,计算机科学中使用最广泛的两种基数是八进制和十六进制。在包括 C 在内的大多数编程语言中,它们各自在整数文字中的前缀是 0b (小心,虽然 gcc 和 clang 在某些条件下支持它,但这不是 C 中的官方前缀,可能不适用于其他编译器),00x .
    printf的情况下, 标签标志 (#) 的用途之一是指定前缀:在 7-a 的情况下,#o指定八进制基数前缀。
  • 这是 C 中的默认行为, x 或 X 说明符指的是无符号十六进制整数。
  • 初始化或分配变量时,最好始终添加 f 后缀。如果你写 float f = 0.15466789797554 ,您可能会因为 double rounding 而收到错误消息.编译器首先将预期的浮点常量舍入为 double ,然后将其四舍五入为 float为任务。
  • 在 C 中,编译器假定没有后缀的浮点常量是 double 类型。要将其类型强制为浮点数,请确保附加 f后缀(例如 3.14f )。
  • C 标准规定 long修饰符将 2 个字节添加到数据类型的宽度。使用 unsigned int正如您所提到的,没有修饰符的数据类型不允许我们为其赋值 100,000。添加 long修饰符将我们从 16 位(2 个字节)带到 32 位(4 个字节),因此我们从 32,767 到 2,147,483,647 作为有符号整数的最大值,从 65,535 到 4,284,867,295 作为无符号整数的最大值。
    在字长为 16 位(2 字节)的处理器上,编译器将 long 分为上半部分和下半部分。然后它将两者存储在单独的寄存器中。
  • 关于c - C Primer Plus 6th 中的 C 中的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237269/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com