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天自制操作系统> 一书中提取出来的. 支持一个:lol::lol::lol::lol: 过来看看一起学习一起研究一下:smile:smile:smile:smile 我只是路过打酱油的。 看不懂 1748504919 发表于 2015-12-5 15:13
看不懂
调试器单步了吗?不实践怎么出真知呢
看不懂 好东西 好东西,支持楼主 感谢分享!努力学习!
页:
[1]