C语言高手请解释下这段代码的具体意思。。。。
答案:2 信息版本:手机版
解决时间 2020-04-12 09:38
已解决
2020-04-11 12:25
unsigned int
reversw_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;
answer=0;
for(i=1;i!=0;i<<=1){
answer<<=1;
if(value&1)
answer|=1;
value>>=1;
}
return answer;
}
这段程序旨在把value的二进制位模式从左到右变换一下,例如00001011变为11010000.还请高手解释一下这段代码如何实现的,如i的作用是什么?for循环请解释一下。
全部回答
1楼
2020-04-11 13:17
for (i=1; i!=0; i <<= 1): 根据机器的int长度来循环 (在这里可能是16次, 把1移动到字长外面就变成0了) 执行下面的操作;
answer <<= 1: 将结果左移一位;
if (value & 1): 如果value的最低位为1, 则answer |= 1把answer的最低位设为1
value >>= 1: 将初始值右移一位
因为初始值跟结果的移动方向相反, 所以可以实现低位高位互换
2楼
2020-04-11 12:37
int ascii_to_integer(char *string)//是函数定义,函数名为ascii_to_integer.它有一个字符指针,名为string.
int value.//定义value为整型.
value=0;//value赋值后,值为0;
while(*string>='0'&&*string<='9')//这是一个判断语句,意思是*string是个值,就是从实参传来的地址指向的值.现在只要这个值大于零且小于九,(记住&&是且的意思)就成立.就执行花括号里的.
value*=10;//一个复合语句,你可以看成这样.value = value*10(这里的*是乘,不是指针)
value+=*string-'0';//可以看成value = value + *string - '0'(意思是说*string指向的值减去0.后和vlaue相加,最后把值赋给value.
string++;//是指针加一.不是值加一.意思是移到下一个地方后,如果有值赋给它就存储个数.比较一开始是1000.(重点:1000是地址,不是值,那1000加个指针等于多少呢.记住,有的编译器,int是二,一个是四.)
if(*string!='\0')//string的值不等于'\0'就执行value=0;
return value;//返回value.
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯