问题标题:
逻辑运算求助首先我用'&'表示与,'|'表示或有这样一个公式:(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中.如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束.
点击显示
其它推荐
热门其它推荐