比如你要转换的字符串为"4243":
1.先获得字符串长度为4
2.循环获得每个字符
对于每个字符都减去'0',即asiic码的差值,比如第一个字符为'4','4'-'0' = 4,结果为整数,拿4*10^4(这个4为字符串长度) = 4000
再加上后面每次获得的数即可
因为一个char的大小是一个byte即8个bit,一共可以表示2的8次方即256个数字0-255但是char分为signed和unsigned两种形式,即是否有正负之分如果是signed就是有正负号的,在机器码中8位二进制bit就需要占用一个作为区别正负号的标记,分别用1或0表示,那么剩下的7个bit能够表示0-127的数字,由于2的8次方一共是256个数字,可以得到负数范围内有128个数字,即一个signed char能表示从-128-127的数字与之相对的,unsigned char即表示从0-255的值,由于ASCII码没有负值,而且一般的ASCII码只需要使用0-127就足够了,所以剩下的那128个字符就组成了extended ASCII,当然,一般是没有什么作用的,也可以看到这个范围的符号一般都是些稀奇古怪的,但是你将它赋值到这个范围就引起了这个问题虽然定义一个char变量生成的究竟是unsigned char还是signed char和你具体使用的环境有关,但一般的INTEL计算机都是生成signed char,如果你不能确定可以使用limits.h中提供的常量来确定,当然int long 等等也能够用相同方式查看,如果是float的话用float.h查看,具体的可以查询library的说明,程序如下,自己运行看看吧#include <stdio.h>#include <limits.h>main(){int a=CHAR_MINint b=CHAR_MAXprintf("%d %d\n",a,b)//Print the minimum value and maximum value of data type char}现在我们已经明白了,用8位bit表示的signed char是无法表示超过127的数字的,所以呢,当你赋予变量一个超过127的值的时候,它就会自动变回负值的最小值并向上递加,可以想象成一个圆环,原理在于CPU中只存在加法器,所以如果不能循环,你就没法做减法了,具体的你可以随便买一本微机原理看看,我推荐CSAPP,如果你想要具体研究C语言的话,可以看看C语言圣经K&R,多用用LINUX欢迎分享,转载请注明来源:内存溢出
评论列表(0条)