首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于二进制转成整数的程序解决办法

2012-03-20 
关于二进制转成整数的程序下列代码把一个二进制的串转换为整数。请填写缺少的语句;char* p 101011000110

关于二进制转成整数的程序
下列代码把一个二进制的串转换为整数。请填写缺少的语句;
char* p = "1010110001100";
int n = 0;
for(int i=0;i<strlen(p); i++)
{
n = __________________;
}
printf("%d\n", n);




答案是: n = p[i]?((n<<1)+p[i]-0x30):n<<1;



  不懂这答案是什么意思,只是翻书知道了“<<”是左移运算符!
  求高手讲解。




[解决办法]
n<<1 其实就是乘以2。
每做一次左移就是乘以2,循环。
[解决办法]
答案中,“:”右边的n<<1永远不会执行。
可改为:
n = p[i] == '1'? ((n << 1) + p[i] - 0x30) : n << 1;
或者直接:
n = ((n << 1) + p[i] - 0x30);
[解决办法]
n = p[i]?((n<<1)+p[i]-0x30):n<<1;

p[i]是否为1, 如果是就在原来的基础上乘以2并加1, (p[i]-0x30) = 1
如果p[i]为0, 就只乘以2,
因为左边的总是右边的2的倍数
[解决办法]
p[i] - 0x30
表示字符串的“1”转成int的1
“0”转成int的0
n<<1表示1左移n位,也就是等于2的n次方

[解决办法]
n = p[i]?((n<<1)+p[i]-0x30):n<<1;


1)如果P[i]不为0,n左移一位并加上p[i]的十进制值,
p[i]-ox30是把p[i]的ASCII码转化为其对应的十进制值,ox30为0的ASCII码的十六进制的表示。

2)如果p[i]为零,直接左移一位,就是乘以2。

[解决办法]
就相当于n=n*2+p[i]-'0'
其实没有必要判断
[解决办法]
<<想想二进制就行
假设用四位二进制来表示一个数
1就是0001
左移一位就是0010=2就相当于乘了个2
[解决办法]
n = n*2+(('0'==p[i])?0:1);

热点排行