2 c signed constants unsigned-integer
我刚刚开始学习 C,一个问题困扰了我一段时间。如果我写
int i = -1;
unsigned int j = 2;
unsigned int k = -2;
Run Code Online (Sandbox Code Playgroud)
整数文字-1and 2and的类型是什么-2,它如何转换为存储在signed intand 中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;
Run Code Online (Sandbox Code Playgroud)
常量1和表达式-1都是类型int。该值存储在int对象中i;不需要转换。(严格来说,它是从 转换int为 的int,但这无关紧要。)
unsigned int j = 2;
Run Code Online (Sandbox Code Playgroud)
2是 类型int。它从 转换int为unsigned int。
unsigned int k = -2;
Run Code Online (Sandbox Code Playgroud)
-2是 类型int。它从 转换int为unsigned int。这一次,因为-2在 的范围之外unsigned int,转换是非平凡的;结果是UINT_MAX - 1。
一些术语:
一个常量就是一些其他语言调用文字。它是代表一个常量值的单个标记。例子是1和0xff。
甲常量表达式是的需要的编译时要被评估的表达式。常量是一个常量表达式;操作数为常量或常量表达式的表达式也是如此。例子是-1和2+2。
| 归档时间: |
|
| 查看次数: |
1939 次 |
| 最近记录: |