当前位置: 首页 > 知识库问答 >
问题:

“如果一个 int 可以保存原始类型的所有值,那么该值将转换为 int,否则转换为无符号 int”--这意味着什么?

柯星辰
2023-03-14

上面的行是关于 C 语言中隐含的积分提升/转换,摘自 Mike Banahan 第 2.8.1.1 节(链接)的书。这是确切的段落:

C 不会以比 int 短的精度完成算术,因此几乎只要您在表达式中使用下面列出的对象之一,就会隐含这些转换。转换定义如下:

每当短整型或字符(或我们尚未遇到的位域或枚举类型)应用了积分提升时

  • 如果 int 可以保存原始类型的所有值,则该值将转换为 int
  • 否则,转换为无符号的 int

以下是我对粗体部分的困惑。请清除这些:

  • “否则”部分不是多余的吗?默认情况下,所有短字符或字符类型都不适合 int 吗,因为 int 的大小大于任何一个?短裤不适合 int 并需要无符号 int 的问题是如何产生的?
  • “否则”部分如何有效——如果将负短整数隐式转换为无符号 int,其值不会改变吗?

虽然我很想把它当作微不足道的,然后继续前进,但我觉得得到一个适当的解释会更好。谢谢。

共有1个答案

南宫胡媚
2023-03-14

int 类型(根据 C 标准)不必大于短型int 只能“不比短”。例如,它们都可以是 16 位。在这种情况下,可能会有一个无法放入 int无符号短值。

(维基百科关于C数据类型的页面非常有启发性。

 类似资料:
  • 我是斯威夫特的新人,现在尽我所能地学习这个。我写了得到参数的函数:数字和函数,它们与这个数字一起工作: 但是编译给出错误。当我试图改变论点时,比如

  • 问题内容: 我想对成绩簿方法使用2D数组,其中包含学生姓名,然后是考试成绩。在课堂上,我有以下内容。 但是我得到一个错误int []无法转换为int。 问题答案: 你有: 但是是一个。数组维数必须为,因此不能用作数组维数(鉴于字面量是多少,我可以理解您对错误的困惑:它想要一个,但您给了它一个)。 从您的描述来看,我猜您的意思是: 哪里是你需要的,包含考试的次数。不过,只是一个猜测。

  • 问题内容: 这里是编程的新手,并且我一直收到错误消息,“不兼容的类型,不能将int转换为int []”,问题是如果R1和R2的长度相等,则将它们加在一起,如果没有打印出一条信息,说明“数组的长度必须相同”,如果这很重要,则不知道我在哪里出错,将不胜感激任何帮助 问题答案: 您需要分配给数组元素,但是这样做做错了。

  • 我正在解决一个问题,其中的任务是在用户提到的给定行输出pascal三角形的结果。 https://leetcode.com/problems/pascals-triangle-ii/ 我写了我的解决方案,其中有存储巨大阶乘结果的问题。 通过这些问题, 整数类型可以在C中存储哪些范围的值 长到无符号的字节数是多少? 并通过其他一些来源,我进行了以下更改,这给了我所需的结果。 由于“C”是int类型,

  • 如何将字符串值转换为int?我正在获取。 结果应该类似于。

  • 我知道,如果我们对字节值执行算术运算,那么隐式地将其提升为int值,结果将是int值,因此我们需要显式地将其转换为byte,以便将结果存储在byte变量中。但我想问- 从字节到int的转换是在声明它的时候发生的,还是在我们在算术运算中使用它的时候发生的?因为我使用的java反编译器在声明时将它从字节转换为int。所以,这是反编译器的问题还是真的是这样。 如果它真的发生在声明时,那么为什么存储超出字

  • 问题内容: 我有一个返回int类型的函数。但是,我只有TAX枚举的值。 如何将TAX枚举值转换为整数? 问题答案: 您需要以某种方式使枚举公开,例如 (顺便说一句,我将名称更改为更常规和易读。) 这是 假设 您要在构造函数中分配值。如果这不是您想要的,则需要向我们提供更多信息。

  • 问题内容: 我有一个表格,可以向Flask发送一个int值。但是,返回一个字符串。Flask为什么不给我一个整数? 我尝试将其强制转换为int,但是下面的路由返回了400或500错误。如何获得Flask中的int类型? 问题答案: HTTP表单数据是一个字符串,Flask不会收到有关客户端将每个值指定为哪种类型的任何信息。因此,它将所有值解析为字符串。 您可以调用以获取ID作为一个整数。如果该值不