【发布时间】:2018-11-14 05:53:24
【问题描述】:
#include <stdio.h>
int main()
{
int i = 23;
char c = -23;
if (i < c)
printf("Yes\n");
else
printf("No\n");
}
这段代码执行 else 块。如果它使用 unsigned int 执行,它会执行 if 块。
使用%x 打印这些值会导致
- c=ffffffe9
- i=17
我的问题是 unsigned ints 和 char 变量如何存储在内存中?
【问题讨论】:
-
此处所述的三种方式之一:port70.net/~nsz/c/c11/n1570.html#6.2.6.2
-
除了变量如何存储在内存中之外,如何将它们转换为表达式也很重要。
-
请记住,这可能会因编译器或编译器设置而有所不同。
char具有实现定义的签名;它可以签名或未签名。如果已签名,则从那时起定义行为;i < c绝对是错误的。如果它是无符号的,那么我相信c将正式具有未定义的值(尽管在大多数二进制补码系统上,它可能具有值256 - 23),使i < c为真(两种类型都将提升为unsigned int转换)。关键是,不能保证否定字符甚至存在。 -
@ShadowRanger
unsigned char c = -23;定义明确。这里使用的签名编码是不敬的。 -
"否定字符是如何存储在内存中的?" --> 很好奇,为什么编码很重要?它的 value 和任何 signed integer 类型一样是 -23。应该够了。
标签: c