C 有符号/无符号值与负值之间的比较
方案1:C 有符号/无符号值与负值之间的比较,c,sizeof,unsigned,signed,C,Sizeof,Unsigned,Signed,方案1: #include <stdio.h> int main() { if (sizeof(int) > -1) printf("Yes"); else printf("No"); return 0; } 输出:Yes 问题: 程序1和程序2之间的区别是什么 为什么sizeof(int)被认为是无符号的 为什么程序2中的2被视为已签名的 sizeof运算符返回的值的类型为size\u t,该类型被指定为无符号类型(通
#include <stdio.h>
int main()
{
if (sizeof(int) > -1)
printf("Yes");
else
printf("No");
return 0;
}
输出:Yes
问题:
sizeof(int)
被认为是无符号的
2
被视为已签名的
sizeof
运算符返回的值的类型为size\u t
,该类型被指定为无符号类型(通常相当于unsigned long
)
简单的纯整数文本,如2
或-1
总是类型为int
,并且int
是有符号的
如果需要无符号整数文本,则必须添加
U
后缀,如2U
这是因为sizeof
运算符返回size\U t
中的值。这应该是一种无符号类型,通常实现为无符号int
数字2
本身是一个int
,而不是unsigned int
这是有符号整数和无符号整数之间常见的算术转换问题。sizeof
运算符返回类型为size\u t
的值,这是一些实现定义的无符号整数类型,在
中定义(另请参见)
整数常量
-1
的类型为int
。当size\u t
实现为“至少”unsigned int
(这在您的情况下很可能发生),则二进制运算符2
的两个操作数都是有符号int
文字2u
将是unsigned
“int是有符号的”--它的实现不是定义了int
是signed
还是unsigned
?@CoolGuy Yoiu在考虑char
,所有其他整数类型都是有符号的。@Cool Guy@JoachimPileborg:或int
位域。不熟悉这个术语“整型文字“。整数十进制常量总是int、long
或long
。整数十六进制常量是int、unsigned、long、unsigned long、long long
或unsigned long
。在32位世界中,代码可以有一个无符号
常量,而没有u
后缀,如0xFFFFFF
。@chux a literal是直接嵌入代码中的任何常量值,因此您可以有'a'
之类的字符文本,也可以有'Foo'
之类的字符串文本,浮点文本,比如12.34
,当然还有整数文本,比如5678
。其中一些文字可以在源代码中以不同的格式表示,对于整数文字,可以使用十进制表示法(默认)、十六进制表示法、八进制表示法和二进制表示法。
#include <stdio.h>
int main()
{
if (2 > -1)
printf("Yes");
else
printf("No");
return 0;
}