当只需要少量字符时,使用类型unsigned char是否可以接受?
如果正在编写一个程序,并且我需要一个小于255的数字,那么可以使用type当只需要少量字符时,使用类型unsigned char是否可以接受?,c,variables,memory-management,integer,C,Variables,Memory Management,Integer,如果正在编写一个程序,并且我需要一个小于255的数字,那么可以使用typeunsigned char作为一个数字,比如我需要一个数字来进行循环吗?是否有任何理由,包括坚持传统和惯例,坚持用int和float等来声明数字 例如,像这样的代码永远不应该被使用吗?或者在这种情况下使用无符号字符是一种很好的做法,因为它分配的内存比短int少 #include <stdio.h> typedef unsigned char short_loop; int main(int argc, ch
unsigned char
作为一个数字,比如我需要一个数字来进行循环吗?是否有任何理由,包括坚持传统和惯例,坚持用int和float等来声明数字
例如,像这样的代码永远不应该被使用吗?或者在这种情况下使用无符号字符是一种很好的做法,因为它分配的内存比短int少
#include <stdio.h>
typedef unsigned char short_loop;
int main(int argc, char *argv[])
{
short_loop i;
for(i = 0; i < 138; i++)
printf("StackOverflow Example Code\n");
return 0;
}
#包括
typedef无符号字符短_循环;
int main(int argc,char*argv[])
{
短环i;
对于(i=0;i<138;i++)
printf(“StackOverflow示例代码\n”);
返回0;
}
我要求将来参考,并且仅使用上面的代码来帮助说明。用于PC-不是很好的实践。 用于嵌入式设备-取决于 如果保证它不会超过255,那么请确保在它被转换为int时仍然可以使用它,但是在本例中,内存差异不是很明显 它违反了可读性
正如其他人所说,您正在不必要地混淆代码。 使用类型定义。。也给它起了一个丑陋的名字。
索引是已知的int类型。仅此而已。用于PC-不是很好的做法。 用于嵌入式设备-取决于 如果保证它不会超过255,那么请确保在它被转换为int时仍然可以使用它,但是在本例中,内存差异不是很明显 它违反了可读性
正如其他人所说,您正在不必要地混淆代码。 使用类型定义。。也给它起了一个丑陋的名字。 索引是已知的int类型。仅此而已。我不会这么做 如果您的程序使用的是大型值数组,那么使用
char
数组而不是int
数组在内存使用方面会有好处
但是,对于单个循环的控制变量,由于几个原因,不太可能有多大好处,并且可能会影响性能
比较i<138
将在进行比较之前将i
提升到int
,因为138
属于int
类型。升级(和向下转换)也可能在初始化和递增i
时发生
int
通常是主机上的“本机类型”-这通常意味着它是主机上首选的类型(例如,硬件提供了在该类型上操作时性能优化的寄存器)。即使在循环中进行比较之前使用了某种技术来防止将无符号字符提升为int
,对int
的操作也可能更有效
因此,最终,您的方法可能会也可能不会带来性能优势。唯一确定的方法是分析代码。。。。好处(或其他方面)取决于编译器(例如受优化方法的影响)和主机(例如与int
上的操作相比,无符号字符的操作效率如何)
您的方法还使代码更难理解,因此更难正确理解。而且,如果将来有其他程序员(或您)修改代码,任何好处都可能被否定。。。。例如,通过意外地重新引入非预期的类型转换。我不会这样做
如果您的程序使用的是大型值数组,那么使用char
数组而不是int
数组在内存使用方面会有好处
但是,对于单个循环的控制变量,由于几个原因,不太可能有多大好处,并且可能会影响性能
比较i<138
将在进行比较之前将i
提升到int
,因为138
属于int
类型。升级(和向下转换)也可能在初始化和递增i
时发生
int
通常是主机上的“本机类型”-这通常意味着它是主机上首选的类型(例如,硬件提供了在该类型上操作时性能优化的寄存器)。即使在循环中进行比较之前使用了某种技术来防止将无符号字符提升为int
,对int
的操作也可能更有效
因此,最终,您的方法可能会也可能不会带来性能优势。唯一确定的方法是分析代码。。。。好处(或其他方面)取决于编译器(例如受优化方法的影响)和主机(例如与int
上的操作相比,无符号字符的操作效率如何)
您的方法还使代码更难理解,因此更难正确理解。而且,如果将来有其他程序员(或您)修改代码,任何好处都可能被否定。。。。例如,通过意外地重新引入非预期的类型转换。是,使用无符号字符
是可以的。我不会使用short_循环
typedef,它只是无缘无故地混淆了代码
有些人建议使用uint8\u t
来强调意图是一个小整数,而不是字符数据;即使uint8\u t
很可能是无符号字符的typedef
理论上,您可以使用typedefuint\u fast8\u t
,这意味着“一个无符号整数类型,至少8位,以及可用类型中可能最快的类型”,显然“最快”的解释有点模糊。是的,使用无符号字符