C数据类型和字符的内存存储?
C data types and memory storage of characters?
嗨,任何人都可以解决 King 的这个练习,这是我在 C 中无法解决的一件事。我了解 C 中的数据类型及其 space 它们能够容纳的内容。至少我认为我做到了,但无论出于何种原因,我无法理解练习的答案。这不是一些家庭作业要求,这只是为了让我更好地理解 C 数据类型,这让我困扰了一段时间 already.Can 有人向我解释了答案和获取它们所涉及的步骤。我已经尝试了很多东西重新阅读章节在线搜索。我无法解决这个问题。谢谢。
练习 7.06
对于以下每一项数据,指定 char、short、int 或 long 类型中的哪一种是保证足够大以存储该项目的最小类型。
(a) 一个月中的天数
(b) 一年中的天数
(c) 一天几分钟
(d) 一天中的秒数
解决方案
(a) 最大。 31: 字符
(b) 最大。 366: 短
(c) 最大。 1500: 短
(d) 最大。 86760:长
任何二进制补码符号二进制数据类型的范围是:-2N-1到-2N-1-1。其中 N 是数据类型的位宽。
标准规定了每个 if 这些类型的最小宽度,分别为 8、16、16 和 32 if char
、short
、int
和 long
.每个都可以更宽,但不能比该顺序中的下一个类型宽,也不能比前面的类型窄。
C 实现可能对其整数类型使用不同的宽度,但 C 标准保证了某些最小值。这些在 C 2018 5.2.4.2.1 1(2018 C 标准,条款 5.2.4.2.1,第 1 段)中指定。
(a) Days in a month
一个月最多有 31 天。 char
保证至少存储127个,所以足够了。
(b) Days in a year
一年有366天。即保证存储多于char
,所以不足。 short
保证最多存储32767个,够用了
(c) Minutes in a day
正常的一天有 60•24 = 1,440 分钟,如果夏令时和标准时间之间存在转换(我们包括在内),则可能有 60•25 = 1,500 分钟。同样,char
不够,short
就足够了。
(d) Seconds in a day
正常的一天有 60•60•24 = 86,400 秒,如果我们包括一个过渡,则可能是 60•60•25 = 90,000,如果有闰秒,则多一秒,所以给出高达 90,001。保证存储的多于short
,所以不足。 int
也只能保证最多存储32,767,所以不够用。 long
保证最多存储2,147,483,647个,足够了。
嗨,任何人都可以解决 King 的这个练习,这是我在 C 中无法解决的一件事。我了解 C 中的数据类型及其 space 它们能够容纳的内容。至少我认为我做到了,但无论出于何种原因,我无法理解练习的答案。这不是一些家庭作业要求,这只是为了让我更好地理解 C 数据类型,这让我困扰了一段时间 already.Can 有人向我解释了答案和获取它们所涉及的步骤。我已经尝试了很多东西重新阅读章节在线搜索。我无法解决这个问题。谢谢。
练习 7.06 对于以下每一项数据,指定 char、short、int 或 long 类型中的哪一种是保证足够大以存储该项目的最小类型。
(a) 一个月中的天数
(b) 一年中的天数
(c) 一天几分钟
(d) 一天中的秒数
解决方案
(a) 最大。 31: 字符
(b) 最大。 366: 短
(c) 最大。 1500: 短
(d) 最大。 86760:长
任何二进制补码符号二进制数据类型的范围是:-2N-1到-2N-1-1。其中 N 是数据类型的位宽。
标准规定了每个 if 这些类型的最小宽度,分别为 8、16、16 和 32 if char
、short
、int
和 long
.每个都可以更宽,但不能比该顺序中的下一个类型宽,也不能比前面的类型窄。
C 实现可能对其整数类型使用不同的宽度,但 C 标准保证了某些最小值。这些在 C 2018 5.2.4.2.1 1(2018 C 标准,条款 5.2.4.2.1,第 1 段)中指定。
(a) Days in a month
一个月最多有 31 天。 char
保证至少存储127个,所以足够了。
(b) Days in a year
一年有366天。即保证存储多于char
,所以不足。 short
保证最多存储32767个,够用了
(c) Minutes in a day
正常的一天有 60•24 = 1,440 分钟,如果夏令时和标准时间之间存在转换(我们包括在内),则可能有 60•25 = 1,500 分钟。同样,char
不够,short
就足够了。
(d) Seconds in a day
正常的一天有 60•60•24 = 86,400 秒,如果我们包括一个过渡,则可能是 60•60•25 = 90,000,如果有闰秒,则多一秒,所以给出高达 90,001。保证存储的多于short
,所以不足。 int
也只能保证最多存储32,767,所以不够用。 long
保证最多存储2,147,483,647个,足够了。