| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:请教一下有关位操作的问题
只看楼主 加入收藏
hexianqi1994
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2011-8-3
结帖率:86.96%
收藏
已结贴  问题点数:5 回复次数:7 
请教一下有关位操作的问题
程序很短,如下
问题主要在红字那一句,问题有3
1.*运算符和++运算符的优先级谁比较高
2.- '0' 这个操作是啥意思
3.( dec<<1 ) + *p++ 这一步是啥意思
#include <stdio.h>
int bin_dec(char *p);
char * pbin = "01001001";
int main(void)
{
 printf("bin: %s is dec: %d\n", pbin, bin_dec(pbin));
 return 0;
}

int bin_dec(char *p)
{
 int dec=0;
 while(*p != '\0')
  dec = ( dec<<1 ) + *p++ - '0' ;
return dec;
}
搜索更多相关主题的帖子: 优先级 
2011-08-26 13:54
hexianqi1994
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2011-8-3
收藏
得分:0 
在线等,求详细
2011-08-26 13:54
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:2 
*p++  相当于 *(p++)  

*p-'0'指:将p指向的字符转变为对应的数字。比如*p为字符'2',则'2'-'0'就是两者的ASCII码之差,即整形数2

dec = ( dec<<1 ) + *p++ - '0' ;等同于:dec = 2*dec + ( *(p++) - '0' );

********多贴代码,少说空话*******
2011-08-26 14:49
hexianqi1994
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2011-8-3
收藏
得分:0 
那第一次循环时,dec的初值是什么
2011-08-26 15:07
hexianqi1994
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2011-8-3
收藏
得分:0 
瞎狗眼了.看不到那里那个dec=0
2011-08-26 15:08
hexianqi1994
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2011-8-3
收藏
得分:0 
能不能说一下dec = ( dec<<1 ) + *p++ - '0' 这条式子是什么原理,感觉跟二进制转化成十进制的一般方式很不同
2011-08-26 15:59
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:2 
以下是引用hexianqi1994在2011-8-26 15:59:27的发言:

能不能说一下dec = ( dec<<1 ) + *p++ - '0' 这条式子是什么原理,感觉跟二进制转化成十进制的一般方式很不同

因为dec初始等于0,我们假设dec有8byte;
*p="01010101";
dec 1 2 3 4 5 6 7 8
 值 0 0 0 0 0 0 0 0

第一次循环
dec<<1后
    0 0 0 0 0 0 0 0
dec=0
dec = ( dec<<1 ) + *p++ - '0'后 dec=0+'0'-'0'=0
dec 0 0 0 0 0 0 0 0

第二次循环
dec<<1后
    0 0 0 0 0 0 0 0
dec=0
dec = ( dec<<1 ) + *p++ - '0'后 dec=0+'1'-'0'=1
dec 0 0 0 0 0 0 0 1
第三次循环
dec<<1后
    0 0 0 0 0 0 1 0
dec=2
dec = ( dec<<1 ) + *p++ - '0'后 dec=2+'0'-'0'=0
dec 0 0 0 0 0 0 1 0
第四次循环
dec<<1后
    0 0 0 0 0 1 0 0
dec=4
dec = ( dec<<1 ) + *p++ - '0'后 dec=4+'1'-'0'=5
dec 0 0 0 0 0 1 0 1
依次类推
最后得到
dec 0 1 0 1 0 1 0 1
dec=85
不知道如此解释对不对,如有错误请不吝赐教,谢谢!
2011-08-27 20:17
快速回复:请教一下有关位操作的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032701 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved