错过会难过 发表于 2015-10-29 09:45:08

200行不到的代码,一个很强大的计算器,带括号的四则运算,左移,右移,按位操作

本帖最后由 错过会难过 于 2015-10-31 10:13 编辑

#include <iostream>
using namespace std;

#define INVALID                -0x7fffffff


char *skipspace( char *p );
int getnum( char **pp , int priority );


int _tmain(int argc, _TCHAR* argv[])
{
        int i;
        char s ="(1+2)*2+1", *p;

        p = s;
        i = getnum( &p , 9 );
        if( i == INVALID ) {
                printf( "cuowu\n" );
        }
        else {
                printf("= %d = 0x%x\n" , i , i );
        }
        return 0;
}
char *skipspace( char *p )
{
        for( ; *p == ' '; p++ ) {}        /* スペースを読み飛ばす */
        return p;
}

int getnum( char **pp , int priority )
{
        char *p = *pp;
        int i = INVALID , j;
        p = skipspace( p );

        /* 単項演算子 */
        if( *p == '+' ) {
                p = skipspace( p + 1 );
                i = getnum( &p , 0 );
        }
        else if( *p == '-' ) {
                p = skipspace( p + 1 );
                i = getnum( &p , 0 );
                if( i != INVALID ) {
                        i = -i;
                }
        }
        else if( *p == '~' ) {
                p = skipspace( p + 1 );
                i = getnum( &p , 0 );
                if( i != INVALID ) {
                        i = ~i;
                }
        }
        else if( *p == '(' ) {        /* かっこ */
                p = skipspace( p + 1 );
                i = getnum( &p , 9 );
                if( *p == ')' ) {
                        p = skipspace( p + 1 );
                }
                else {
                        i = INVALID;
                }
        }
        else if( '0' <= *p && *p <= '9' ) { /* 数値 */
                i = strtol( p , &p , 0 );
        }
        else { /* エラー */
                i = INVALID;
        }

        **** Hidden Message *****

此代码是 <30天自制操作系统> 一书中提取出来的.

无名侠 发表于 2015-11-1 00:51:13

支持一个:lol::lol::lol::lol:

dps521 发表于 2015-11-29 13:10:24

过来看看一起学习一起研究一下:smile:smile:smile:smile

斩月and剡月 发表于 2015-12-1 09:47:31

我只是路过打酱油的。

1748504919 发表于 2015-12-5 15:13:54

看不懂

错过会难过 发表于 2015-12-7 10:05:56

1748504919 发表于 2015-12-5 15:13
看不懂

调试器单步了吗?不实践怎么出真知呢

鸡汤不加盐 发表于 2016-1-21 00:54:06


看不懂

浅唱19913 发表于 2016-1-21 18:09:30

好东西

ldyboys 发表于 2016-1-23 21:37:23

好东西,支持楼主

辅助初学者 发表于 2016-2-5 13:41:55

感谢分享!努力学习!
页: [1]
查看完整版本: 200行不到的代码,一个很强大的计算器,带括号的四则运算,左移,右移,按位操作