字典翻译 问答 其它 逻辑运算求助首先我用'&'表示与,'|'表示或有这样一个公式:(A&B)|(C&D)现在想解开这个括号,就是求一个不带括号的算式,而计算优先级是需要从左到右的,也就是说如果结果是A&B|C&D,那么就相当于
问题标题:
逻辑运算求助首先我用'&'表示与,'|'表示或有这样一个公式:(A&B)|(C&D)现在想解开这个括号,就是求一个不带括号的算式,而计算优先级是需要从左到右的,也就是说如果结果是A&B|C&D,那么就相当于
问题描述:

逻辑运算求助

首先我用'&'表示与,'|'表示或

有这样一个公式:(A&B)|(C&D)

现在想解开这个括号,就是求一个不带括号的算式,而计算优先级是需要从左到右的,也就是说如果结果是A&B|C&D,那么就相当于带括号的((A&B)|C)&D,当然,这个结果肯定是不对的.

陈小林回答:
  一般来说,如果认为&和|两个运算的优先级相同的话,则你的问题是无解的,也就是说,无法将   (A&B)|(C&D)转换为不带括号的形式.   当然,有两种方式可以转换该问题,   1.定义&和|的优先级,   1.1如果认为&的优先级高,则可以直接将上面表达式的括号去掉   1.2如果认为|优先级高.则根据公式(X&Y)|Z=(X|Z)&(Y|Z),上面表达式可以化为   A|C&B|C&A|D&B|D   另外一种形式是使用后缀表达式.这个可以上网搜一下,一般计算机计算时,都会先转换为后缀表达式,将括号删除.比如(2+1)*3,其后缀表达式为:21+3*   (A&B)|(C&D)的后缀表达式为AB&CD&|,实际上编译器在计算复杂表达式时,就是将所有表达式都转换为了后缀表达式在生成机器码的.   运用后缀表达式进行计算的具体做法:   建立一个栈S.从左到右读后缀表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中.如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束.
点击显示
其它推荐
热门其它推荐
  • 其它