Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
对于(int ii)或对于(C中的字符ii)?_C_Char_Int - Fatal编程技术网

对于(int ii)或对于(C中的字符ii)?

对于(int ii)或对于(C中的字符ii)?,c,char,int,C,Char,Int,我经常看到人们为(intii=0;ii

我经常看到人们为(intii=0;ii<50;ii++)编写


但是对于<256的数字,为什么人们不写
char ii
而不是
int ii
,因为它肯定会是8比特而不是更多?

C会对转换为int的值进行所有小于int的算术运算,编译器可能会将ii放入寄存器,所以选择较小的类型不会为您赢得任何东西。它会使由于不断转换回(字符),ght甚至更糟

接下来,您有一个问题:char只能保证增加到127,因此255将超出范围。您必须选择未签名的char


在您的示例循环中,这并不意味着什么。对于这个循环,编译后很可能没有什么不同。

C对转换为int的值执行小于int的值的所有算术,编译器可能会将ii放入寄存器中,因此使用较小的类型不会为您赢得任何东西。由于不断使用con,情况可能会更糟返回到(字符)

接下来,您有一个问题:char只能保证增加到127,因此255将超出范围。您必须选择未签名的char


在您的示例循环中并不是这样。对于这个循环,编译后很可能没有什么不同。

50
是一个
int
0
)也是如此;如果您对控制变量使用
char
,那么每次比较都会强制编译器进行额外的转换(当然,编译器可以优化转换)。因为它肯定它将是8位,而不是更多,这是错误的。
char
不一定是8位,即使是,也不能保证能够保存255位,因为实现可能使用纯签名字符。例如,
For(char ii=0;ii<255;ii++)
是危险的,只能在具有无符号字符的平台上按预期工作。字符可能比int慢。请阅读CPU体系结构和寄存器。一点汇编知识对C开发人员来说总是很好的。请看,好的,所以字符必须至少是8位。因此,如果不相等,它应该小于int。@David天宇王:底线是:
ii++
可能会导致
ii
的值的副本被存储起来供以后使用。当然,在这种情况下,任何半体面的编译器都可以优化这段代码,但由于这个问题完全是关于(我认为毫无意义)过度优化的,所以我想让你知道
50
int
0
也是如此);如果对控制变量使用
char
,则会强制编译器在每次比较时进行额外的转换(当然,编译器可以优化转换)。因为它肯定是8位,而不是更多,这是错误的。
char
不一定是8位,即使是,也不能保证能够保存255位,因为实现可能使用纯签名字符。例如,
For(char ii=0;ii<255;ii++)
是危险的,只能在具有无符号字符的平台上按预期工作。字符可能比int慢。请阅读CPU体系结构和寄存器。一点汇编知识对C开发人员来说总是很好的。请看,好的,所以字符必须至少是8位。因此,如果不相等,它应该小于int。@David天宇黄:底线是:
ii++
可能会导致
ii
的值的副本被存储起来供以后使用。当然,在这种情况下,任何一个半体面的编译器都可以优化这段代码,但由于这个问题完全是关于(在我看来毫无意义)过度优化的,所以我想让你知道