c - C Primer Plus 6th 中的 C 中的数据类型
问题描述
世界。我是 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,十六进制格式怎么会有无符号整数?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 中数据类型的理解并教给我。
解决方案
除二进制外,计算机科学中使用最广泛的两个基数是八进制和十六进制。在包括 C 在内的大多数编程语言中,它们各自在整数文字中的前缀是
0b
(注意,虽然 gcc 和 clang 在某些条件下支持它,但这不是 C 中的官方前缀,并且可能不适用于其他编译器),0
并且0x
. 在 的情况下printf
,井号标志 (#) 的用途之一是指定前缀:在 7-a 的情况下,#o
指定八进制基前缀。这是 C 中的默认行为,x 或 X 说明符指的是无符号十六进制整数。
初始化或分配变量时,最好始终添加 f 后缀。如果你写,你可能会因为双舍入
float f = 0.15466789797554
而出错。编译器首先将预期的浮点常量四舍五入为 a ,然后将其四舍五入为 a以进行赋值。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 拆分为上半部分和下半部分。然后它将两者存储在单独的寄存器中。
推荐阅读
- javascript - 尽管有适当的 Access-Control-Allow-* 标头,但 CORS ajax 调用失败
- excel - Excel 2016 散点图 - 如果带有公式的单元格为空白,则 x 轴上的位置错误
- elasticsearch - Logstash Elasticsearch 输出给出 401 错误
- unauthorized - Ant 媒体服务器在获取 VOD 块时使令牌无效
- amazon-web-services - 限制单个 AWS Lambda 的 AWS Secrect
- java - 按 Java List 中的第一个元素过滤
- list - 在 Robot Framework ***Variables*** 部分中将列表变量初始化为空
- javascript - 在电子表格的列中打印嵌套数组
- python - Pulumi Import GCP Instance Error in boot_disk 属性冲突
- javascript - 如何监听“计数”变量的变化并根据其值触发动作