【发布时间】:2017-05-15 07:20:56
【问题描述】:
我刚刚开始学习 C,一个问题困扰了我一段时间。如果我写
int i = -1;
unsigned int j = 2;
unsigned int k = -2;
整数文字 -1 和 2 和 -2 的类型是什么,它是如何转换为存储在 signed int 和 unsigned int 中的?
有符号整数是什么意思,是变量还是整数字面量的属性?比如-2 是有符号整数而2 是无符号整数?
【问题讨论】:
-
在 C 中,字面量是具有预定义值的常量。文字可以是任何基本数据类型,例如整数常量、浮点常量、字符常量或字符串文字。关于有符号和无符号整数,它指定了如何解释最重要的整数。在您的情况下,所有三个 -1、2 和 -2 都是整数类型。在 stackoverflow 上提出了一个关于有符号和无符号整数的差异的问题。你可以参考-stackoverflow.com/questions/3812022/…
-
@GAURANGVYAS 详细信息:奇怪的是,在 C 中,字符常量 不是
char类型,而是int类型。 “整数字符常量的类型为int”C11 §6.4.4.4 10 -
这里没有人提到二进制补码,即所有“整数”类型的存储方式,无论是有符号还是无符号。 (位相同,只是解释不同)见:en.wikipedia.org/wiki/Two's_complement
-
表达式
-1不是常量(字面量)。它是一个由应用于常量1的一元-运算符组成的表达式。 -
@ebyrob:是的,除了二进制补码之外的表示形式很少见。但同样,二进制补码仅用于有符号类型。无符号类型使用纯二进制表示。
标签: c constants signed unsigned-integer