c语言是一种弱类型语言,如果使用熟练了你就会知道,类型什么的都是浮云,内存才是王道,考虑问题的时候要深入本质才行,关于这个问题从内存来看,如下:
1.
char是字符型,内存中占用
1
个字节,取值范围是-128到127,int类型占用
4
个字节,范围就不说了,肯定是比char要大的多,这两个都是有符号数。
2.
char和int一般情况下是可以直接做加减运算的,你可以直接把char当成一个int,只不过取值范围小点;
3.
不同类型的数值在做运算时,以尽量不丢失有效数据为原则,比如char和int相加,系统会自动把char转换成int,最终结果也是int型;
4.
赋值时如果类型不一样,要小心,若等号左边的类型小于右边的,会产生截断赋值(特别注意),大于的话就没问题,不会丢失有效数据。
5.
如你写的第一句,a-b是int,c是char,比较时会先把char转换成int,也就是从1个字节变成4个字节,肯定不会丢失有效数据,没问题;
6.
第二句,a+b是int,要赋值给char型c,相当于把4个字节的信息装到1个字节的内存中,这肯定放不下,因此会产生截断赋值,取a+b结果的最后一个字节赋值,前面三个字节则会丢掉,
所以这些写会有风险(当然编译肯定是过的,只是警告罢了),这种情况下,如果a+b结果没超过char取值范围,也问题,因为不会丢失有效数据,如果超过了的话,结果就不是它应该有的结果了,这是就要小心了,所以一般别这么写,除非你确定数据不会越界,一旦越界就会截断赋值(只是结果不对,但程序也不会崩溃的)。
其实不用转!只要在赋值的时候在数字那里加单引号就行了!就像这样:
int main(void)
{
char a;
a='1';//字符1
printf("%c\n",a);
}
首先查表0~9的asc2码连在一起的,所以你只需要最小值(30)+数值本身就可以了,不用逐个做
比如0:30,8:30+8
然后因为你不仅仅是个位所以做循环
while(x!=0)
{
a=x%10;
x=x/10;
char c=30+a;
}
大概思路就是这样
我不用c很久了可能有些错误
查表啊 就像led数码管显示那样。
char code zhifu【】={0~99对应字符表示};
int a=数;
char c;
c=zhifu【】;
sprintf(buffer, "%d", your_int); // char buffer[1024];