【发布时间】:2019-12-08 16:06:31
【问题描述】:
世界。 我是 CS 方面的新手,并通过《C Primer Plus》一书学习 C。 第 3 章末尾有复习题,我对他们的一些答案感到困惑。 我想通过我对他们的理解来澄清一下。请纠正我并分享您的一些知识。
所以这是下面书中的问题,然后是我的问题。
6. 确定以下每个常量的数据类型(在声明语句中使用)和 printf() 格式说明符: 常量类型说明符 -一种。 12 整数 %d -b。 0X3 无符号整数 %#x ... -d。 2.34E07 双 %e -e。 '\040' 字符(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,但在答案中两者都是无符号整数。
关于 6-d,我在书中读到 C 标准提供的浮点数必须能够表示至少六个有效数字。这里 2.34E07 有更多,所以加倍。但也从书中,默认情况下,编译器假定浮点常量是双精度的。此默认规则是否仅适用于常量?分配变量时需要具体说明吗?
关于 6-f,7.0 怎么翻倍?是因为编译器假定浮点常量是双精度的吗?对于变量,我应该使用 float f = 7.0; ?
关于7-d,是不是long类型(保证32位)有更多的空间容纳100,000?但我们必须假设 16 位 int 系统,在无符号表示中介于 0 和 65,535 之间。一台拥有 16 位 int 系统的计算机如何处理超出其能力的范围?
请随意撕裂我,打破我对 C 中数据类型的理解并教给我。
【问题讨论】:
-
谢谢你,user3121023。八进制值是有意义的。但是八进制的 012 是十进制的 10。 unsigned int 是必要的吗?是的,2.34E07 和 2.34E27 有三个有效数字,但指数不同。 2.34E07 是 23,400,000,对吗?为什么要加倍 2.34E07?是不是浮动的价值不够?
标签: c variables floating-point int constants