daitou 发表于 2013-12-10 23:01:36

C程序求教

//Program 5.1.b
#include "stdafx.h"
#include "stdio.h"
int get_integer(char *);
int _tmain(int argc, _TCHAR* argv[])
{
        char c;
        printf("Enter a number: ");
        scanf("%s", c);
        printf("The number is %d.", get_integer(c));
        return 0;
}
int get_integer(char * c)
{
        int a = 0, i = 0, n = 0;
        char s;
        for (; *c!=0; c++)
        {
                if (*c>='0' && *c <='9')
                        s = *c;
        }
        for (; i < n; i++)
                a = a * 10 + (s & 15);
        return a;
}
问题:
l 。How does the function get_integer get the argument from the call function? What does it return?

2. What is the expression (s & 15) used for? Can you use another expression to replace it?




浮砂 发表于 2013-12-10 23:01:37

------------------------

本帖最后由 浮砂 于 2013-12-11 08:52 编辑

get_integer () 这个函数实现的是把数字字符串转换成 一个整数,并返回。
功能是把字符一个个提取出来,如果是'0'~'9'之间的,就保存到一个新的数组里面。
以便为转换成int类型做准备。
(s [   i   ]& 15)是把一个'0'~'9'的字符转换成对应的0~9
例:'1'的二进制是               0011 0001
         15的 二进制是               0000 1111
    '1' 和15 做按位与的操作得 0000 0001
    就是十进制的1

同样的'8'的二进制是 0011 1000
            '1' 和15 做按位与的操作得 0000 100
PS:按位与就是把相应的二进制位的数进行and 操作   仅有1 & 1 时为1
                                                                        其他的   0 &1、 1 & 0 、0 & 0 都是0

( s [ i]& 15)可以用(s - '0')代替。

例:'1'的ASCII 码是 49
         '0'的 ASCII 码是 48
   '1'-'0'=49-48=1
同样的'8'的ASCII码是56
            '8'-'0'=56-48= 8

daitou 发表于 2013-12-11 11:45:55

谢谢啦:感谢这位大神的回复
页: [1]
查看完整版本: C程序求教