Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程:if语句中的除法_C_If Statement - Fatal编程技术网

C编程:if语句中的除法

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

当大小值大于-1时,为什么打印2?

链接到代码:

#包括
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;
}