gpt4 book ai didi

c++ - 如何在表达式计算器中处理二进制整数

转载 作者:行者123 更新时间:2023-11-28 03:04:31 27 4
gpt4 key购买 nike

我的表达式计算器的分词器中有一个函数,它根据用户在程序的 UI 部分输入的字符生成整数。我现在正在尝试处理 BinaryIntegers 并想知道如何检查二进制数。有没有一种方法可以了解计算机读取普通整数的方式,或者我可以通过其他方式做到这一点吗?

Token::pointer_type Tokenizer::_get_number( Tokenizer::string_type::const_iterator& currentChar, Tokenizer::string_type const& expression ){

assert( isdigit( *currentChar ) && "currentChar must pointer to a digit" );

// Check for binary number
// To Do: BinaryInteger code.

// Either Integer or Real
Integer::value_type const MAX_UNSIGNED_D10 = (std::numeric_limits<Integer::value_type>::max()-10)/10;
Integer::value_type accumulator = *currentChar++ - '0';

while( currentChar != end(expression) && isdigit(*currentChar) && accumulator <= MAX_UNSIGNED_D10 )
accumulator = accumulator * 10 + *currentChar++ - '0';

if( currentChar == end(expression) || (!isdigit( *currentChar ) && *currentChar != '.' ) )
return make<Integer>( accumulator );

// either a real number or too big for an integer
return make<Integer>( 0 ); // replace with Real number code.
}

最佳答案

二进制数仅由零和一组成。但是,没有办法判断像 11010 这样的数字是表示“一万一千十”还是“二十六”,除非您 一个方法。这不是二进制与十进制的独特问题。这也是八进制和十六进制的问题。

多年来,有很多方法可以区分不同基数中的常数。 C/C++ 使用前缀00x 来标识八进制和十六进制。它没有二进制文件。例如,一些汇编程序使用基于标点符号的前缀(例如 %$)来区分二进制和十六进制与十进制,而其他汇编程序则使用后缀。

我的建议:选择一个与您的运算符集中的任何字符都不匹配的单个前缀字符,例如 $',或者选择一个小的双字符前缀例如0b表示二进制数。然后在您的代码中,您只需要查找该前缀字符并使用不同的解析循环来处理二进制常量。例如,如果您选择 $:

if (currentChar == '$')
token = _getBinary( ++currentChar, expression );
else
... rest of code;

然后

Token::pointer_type Tokenizer::_get_binary( Tokenizer::string_type::const_iterator& currentChar, Tokenizer::string_type const& expression )
{
Integer::value_type const MAX_UNSIGNED_D2 = std::numeric_limits<Integer::value_type>::max()-1)/2;
Integer::value_type accumulator = *currentChar++ - '0';

while ((*currentChar == '0' || *currentChar == '1') && accumulator <= MAX_UNSIGNED_D2)
accumulator = accumulator * 2 + *currentChar++ - '0';

return make<Integer>( accumulator );
}

您可能想向该分词器添加一些错误处理,但您明白了。现在,您的代码会将 $110110 形式的字符串识别为二进制常量。

关于c++ - 如何在表达式计算器中处理二进制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com