我刚开始学习C,现在有一个问题困扰了我一段时间。如果我写
int i = -1;
unsigned int j = 2;
unsigned int k = -2;
整数文字
-1
和2
和-2
的类型是什么,如何将其转换为存储在signed int
和unsigned int
中?有符号整数的含义是变量还是整数文字的属性?像
-2
是有符号整数,而2
是无符号整数?
最佳答案
首先,-1
不是整数常量。这是一个由应用于常量-
的一元1
运算符组成的表达式。
在C99和C11中,十进制整数常量的类型是int
,long int
或long long int
的第一个适合其值的常量。同样,八进制或十六进制文字的类型为int
,unsigned int
,long int
,unsigned long int
,long long int
或unsigned long long int
。详细信息在N1570 6.4.4.1。中。-1
和-2
是常量表达式。一元-
运算符的结果与操作数具有相同的类型(即使该结果引起溢出,就像-INT_MIN
在大多数实现中一样)。
int i = -1;
常量
1
和表达式-1
均为int
类型。该值存储在int
对象i
中;无需转换。 (严格来说,它是从int
转换为int
,但这没关系。)unsigned int j = 2;
2
的类型为int
。它从int
转换为unsigned int
。unsigned int k = -2;
-2
的类型为int
。它从int
转换为unsigned int
。这次,因为-2
在unsigned int
的范围之外,所以转换是不平凡的;结果是UINT_MAX - 1
。一些术语:
常数是其他一些语言称为文字的东西。它是代表恒定值的单个 token 。示例为
1
和0xff
。常量表达式是在编译时需要求值的表达式。常数是常数表达式;其操作数是常量或常量表达式的表达式也是如此。示例为
-1
和2+2
。
关于c - 什么是整数文字类型?以及它们如何存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41405578/