C编程:if语句中的除法
当大小值大于-1时,为什么打印2? 链接到代码:C编程:if语句中的除法,c,if-statement,C,If Statement,当大小值大于-1时,为什么打印2? 链接到代码: #包括 int数组[]={1,2,3,4,5,6,7,8}; #定义大小(sizeof(数组)/sizeof(int)) 内部主(空){ 如果(-1两个参数的类型不同 参数已“转换”为“公共”类型,有符号-1和无符号大小之间的“公共”为无符号 所以-1被转换为->0xfffffff(取决于体系结构),该值大于大小这两个参数的类型不同 参数已“转换”为“公共”类型,有符号-1和无符号大小之间的“公共”为无符号 因此-1被转换为->0xfffffff
#包括
int数组[]={1,2,3,4,5,6,7,8};
#定义大小(sizeof(数组)/sizeof(int))
内部主(空){
如果(-1两个参数的类型不同
参数已“转换”为“公共”类型,有符号-1和无符号大小之间的“公共”为无符号
所以-1被转换为->0xfffffff(取决于体系结构),该值大于大小这两个参数的类型不同
参数已“转换”为“公共”类型,有符号-1和无符号大小之间的“公共”为无符号
因此-1被转换为->0xfffffff(取决于体系结构),该值大于C标准中关于整数转换的大小:
如果具有无符号整数类型的操作数的秩大于
或等于另一个操作数类型的秩,即
带符号整数类型转换为带符号的操作数类型
无符号整数类型
这里-1的类型为int
,而SIZE
的类型为SIZE\u t
。在c编译器上,SIZE\u t
是无符号的,并且其秩大于或等于int
,因此-1
被转换为SIZE\u t
,这会给出一个很大的正数(SIZE\u MAX
)来自C标准的整数转换:
如果具有无符号整数类型的操作数的秩大于
或等于另一个操作数类型的秩,即
带符号整数类型转换为带符号的操作数类型
无符号整数类型
这里-1的类型为int
,而SIZE
的类型为SIZE\u t
。在c编译器上,SIZE\u t
是无符号的,并且其秩大于或等于int
,因此-1
被转换为SIZE\u t
,这会给出一个很大的正数(SIZE\u MAX
)切勿混合使用有符号和无符号。sizeof
的结果是size\u t
是无符号整数,-1
是有符号整数。另外:,。切勿混合使用有符号和无符号。sizeof
的结果是size\u t
是无符号整数,-1
是有符号整数。另外:。
#include <stdio.h>
int array[] = {1,2,3,4,5,6,7,8};
#define SIZE (sizeof(array)/sizeof(int))
int main(void) {
if(-1<=SIZE) printf("1");
else printf("2");
return 0;
}