c - 什么是整数文字类型?以及它们如何存储?

标签 c constants signed unsigned-integer

我刚开始学习C,现在有一个问题困扰了我一段时间。如果我写

int i = -1;
unsigned int j = 2;
unsigned int k = -2;

整数文字-12-2的类型是什么,如何将其转换为存储在signed intunsigned int中?

有符号整数的含义是变量还是整数文字的属性?像-2是有符号整数,而2是无符号整数?

最佳答案

首先,-1不是整数常量。这是一个由应用于常量-的一元1运算符组成的表达式。

在C99和C11中,十进制整数常量的类型是intlong intlong long int的第一个适合其值的常量。同样,八进制或十六进制文字的类型为intunsigned intlong intunsigned long intlong long intunsigned 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。这次,因为-2unsigned int的范围之外,所以转换是不平凡的;结果是UINT_MAX - 1

一些术语:

常数是其他一些语言称为文字的东西。它是代表恒定值的单个 token 。示例为10xff

常量表达式是在编译时需要求值的表达式。常数是常数表达式;其操作数是常量或常量表达式的表达式也是如此。示例为-12+2

关于c - 什么是整数文字类型?以及它们如何存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41405578/

相关文章:

c - 如何在 Linux 中使用微状态记账?

c - Swift3:将原始指针转换为 Int(指针本身就是 int 值,不指向任何地方!)

Haskell 最小/最大双常数

java - 为什么 ANDing 数字会在有符号和无符号表示之间转换?

c++ - C/C99/C++/C++x/GNU C/GNU C99 中枚举的签名

c - 使用regex.h时如何在c中匹配字母 "$"?

c - 函数原型(prototype)给出未找到警告

php - 为什么 PHP 不支持字符串中常量的花括号扩展?

php - 如何更改 PHP 常量?

python - 如何在python中将有符号整数转换为无符号整数