请问char变量是啥变量,只是跟ASCII有关吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问char变量是啥变量,只是跟ASCII有关吗?相关的知识,希望对你有一定的参考价值。

char 表示一个字符啊,其和int在0-255范围内是等价的。而字符编码采用的是ASCII码,所以看起来和ASCII有关。其实,它代表一个字符,ASCII是一种字符编码。 参考技术A char是字符型变量,有符号,占用1个字节的存储空间,在当作char进行输入、输出时其值被当成ASCII码,输入、输出函数根据这个码找到相应的字符输入或输出。本回答被提问者和网友采纳

C++ 疑问 ; 请问这个的作用是啥 还有 ret是啥

float daPower(float x,int n)

float ret=1,tmp;
if(n==1)return x;
tmp=daPower(x,n>>1);
ret=tmp*tmp;
if(n&1)ret*=x;
return ret;

float daPower(float x,int n)

这个代码应该是计算x的n次幂,不过写的挺乱的
ret只是一个作为返回值的临时变量而已,只是单词“return”的缩写(我是说单词return,和return语句没关系)

float ret=1,tmp;
if(n==1)return x;//如果n为1,就代表是求某个数的1次幂,一个数的1次幂肯定是这个数本身,能理解吧
tmp=daPower(x,n>>1);//如果上条语句没返回就到这里,n>>1就是右移一位,一般可以理解为n/2
ret=tmp*tmp;//上面是把n/2,可是求的还是次幂,所以要把结果再乘一次,例如x的10次幂等于,x的5次幂乘以x的5次幂,理解了吗?
if(n&1)ret*=x;//这条语句的意思是,假设n是奇数,那么再乘一边x,意思就是假设n为5,那么n>>2就为2,两个x的2次幂相乘的结果是n的4次幂,我们要求5次幂,所以这里再乘一次
return ret;

总而言之⋯⋯很莫名其妙的算法
参考技术A 这是快速幂的求法~就是求实数x的n次方是多少
ret是一个返回值,最后返回的ret就是x的n次方
举个最简单的例子:
比如我们要求2的100次方,常规做法是将2自乘100次,对吧?但这个程序只要乘7次就可以啦~(运算级别降到了log2 100这么少!)
它的运行方法是:2^100=2^50×2^50,而2^50=2^25×2^25,以此类推,那么对于2^100来说,我们只要用tmp记录一个2^50,再返回tmp*tmp就可以了(也就是上述程序的ret=tmp*tmp的作用)
再解释一下tmp=daPower(x,n>>1)的意思,n>>1的意思就是n二进制中右移一位(什么那么复杂啦,就是除以2取整数嘛!)也就起到了算2^100只要算2^50次方(50由100>>1也就是除以2得到)的作用,至于最麻烦的if(n&1)ret*=x的话嘛~就是一种特殊情况:
首先if(n&1)是判断n是不是奇数,(是把n转成了二进制,判断最后一位是否是1,是1就表示是奇数,不信你试试奇数二进制下最后一位是不是1?)如果是奇数就看下面:
比如我们算2^101,101不是偶数,不能单纯地101>>1再自乘得到,而要算出2^50,然后再自乘一个2得到,也就是2^101=(2^50)×(2^50)*2,所以有了if(n&1)ret*=x;(相当于ret=ret*x;)这一句话了~最后就返回个ret
再介绍点好玩的东西,为什么返回值是ret不是ter或者别的什么呢?因为return这个单词前三个字母就是ret!为了方便记忆说等一下我要返回值,所以很多人都把返回值用ret作变量!谢谢~
参考技术B float daPower(float x,int n)

float ret=1,tmp;
if(n==1)return x; //剩下1次方的时候,才是递归函数终止条件
tmp=daPower(x,n>>1);
ret=tmp*tmp;
if(n&1)ret*=x;
return ret;

这个函数是求 x^n,也就是x的n次方,ret就是所求的返回值,由于这个函数用了移位,和递归,理解这个算法上就需要一定的数学功底
随便举个例子
假设调用的是 float daPower(2.1, 31),也就是2.1的31次方
这个算法的过程就是
float daPower(2.1,31)

float ret=1,tmp;
if(n==1)return x; //因为 n=31,所以此分支没有进来
tmp=daPower(x,n>>1); //n>>1就是n/2,所以tmp的值就是 2.1的15次方,递归调用
ret=tmp*tmp; //ret= tmp*tmp bn就是2.1的 30次方
if(n&1)ret*=x; //因为n是31,所以此分支进入 ret*=x; 也就是2.1的31次
return ret;

以上是关于请问char变量是啥变量,只是跟ASCII有关吗?的主要内容,如果未能解决你的问题,请参考以下文章

java中的“char”指的是啥?

字符型变量C为啥直接可以和ASCII码比较呢?

请问 C语言里的 结构体中定义变量 后面的:是啥意思

c语言中 char a; 请问 a与’a’有什么区别 ’a’是a的ascll码?是个数字?

在java中,怎样判断一个变量是啥类型的?

如何在sqlserver存储过程中输出参数,语句是啥,我不用输出参数,我只是在体内输出语句,请问是啥??