ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2136|回复: 13

[分享] 也谈逻辑。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-21 20:53 | 显示全部楼层 |阅读模式
本帖最后由 shenghua8 于 2015-8-26 17:53 编辑

也谈逻辑值与数值,逻辑函数与运算符。

(一)众所周知
对于逻辑值来说:
四则运算中,TRUE=1,FALSE=0;
逻辑判断中,非0数值=TRUE,0=FALSE。


对于逻辑函数来说:
AND函数,“逻辑与”运算,也叫“逻辑乘”运算,可用“乘法”(“*”)代替;
OR函数,“逻辑或”运算,也叫“逻辑加”运算,可用“加法”(“+”)代替。


Excel 中,还有两个逻辑函数:
XOR函数,“逻辑异或”运算;
NOT函数,“逻辑非”运算。
这两个函数,能用什么运算代替呢?似乎很少有人提及。


(二)本人认为
XOR函数,可用“不等于”(“<>”)代替;
NOT函数,可用“1减”(“1-”)代替。


异或(XOR)的运算规律为:
若两值相同,异或结果为FALSE;
若两值不同,异或结果为TRUE。


XOR 用 <> 代替,推导如下:
两值相同,都为TRUE,异或结果应为FALSE

  1. =XOR(TRUE,TRUE)
  2. =TRUE<>TRUE
  3. =FALSE
复制代码

两值不同,一个为TRUE,另一个为FALSE,异或结果应为TRUE

  1. =XOR(TRUE,FALSE)
  2. =TRUE<>FALSE
  3. =TRUE
复制代码


  1. =XOR(FALSE,TRUE)
  2. =FALSE<>TRUE
  3. =TRUE
复制代码

两值相同,都是FALSE,异或结果应为FALSE

  1. =XOR(FALSE,FALSE)
  2. =FALSE<>FALSE
  3. =FALSE
复制代码

NOT 用 1- 代替,推导如下:

  1. =NOT(TRUE)
  2. =1-TRUE
  3. =1-1
  4. =0
  5. =FALSE
复制代码


  1. =NOT(FALSE)
  2. =1-FALSE
  3. =1-0
  4. =1
  5. =TRUE
复制代码

从上面推导结果可以看出:
XOR函数,可用“不等于”(“<>”)代替;
NOT函数,可用“1减”(“1-”)代替。


(三)还有一个问题
NOT函数可以返回数组结果,“1-”运算能返回数组结果吗?

下面用“多单元格数组公式”试试,如图,都跟A2:A5的值进行运算:
是否支持数组.png
选中H2:H5区域(H2激活),整体使用一个数组公式:
  1. =NOT(A2:A5)
复制代码
按 Ctrl+Shift+Enter 三键结束,
运算结果正确,这个证明NOT能返回数组结果。


选中I2:I5区域(I2激活),整体使用一个数组公式:
  1. =1-(A2:A5)
复制代码
按 Ctrl+Shift+Enter 三键结束,
因为0可代替FALSE,1可代替TRUE,所以运算结果也正确,这个证明“1-”照样能返回数组结果。


顺便试试代替 XOR 的“<>”能否返回数组结果,
选中G2:G5区域(G2激活),整体使用一个数组公式:
  1. =1<>--(A2:A5)
复制代码
按 Ctrl+Shift+Enter 三键结束,
运算结果正确,这个证明“<>”能返回数组结果。

看来,用“1-”代替 NOT,没问题,同样能返回数组结果;
用“<>”代替XOR,也没问题,还能返回数组数组结果呢。


奇妙的是:
AND、OR、XOR其实都不能返回数组结果;
而代替它们的“*”、“+”、“<>”却都能返回数组结果。
(NOT 跟“1-”就不用说了,都能返回数组结果。)


(四)再解决一个疑点
前面的推导中,“1-TRUE”等于“1-1”,进而等于0,也就等于FALSE,确定吗?
这个疑点的原因在于,逻辑判断中,所有非0数值都能等于TRUE,那么“1-TRUE”会不会出现“1-2
”、“1-(-1)”,导致结果为-1、2等非0数值,都表示TRUE,而不是FALSE呢?
这里存在一个是否互换的问题,“非0数值=TRUE”这两个式子,左右两边是不可以互
换的。也就是说 TRUE 并不是全等于“非0数值”。
用试验来证明:
对 TRUE 进行 减负运算、加减乘除运算、乘方运算以及 N 函数运算,公式分别如下:
  1. =--TRUE
复制代码
  1. =TRUE+0
复制代码
  1. =TRUE-0
复制代码
  1. =TRUE*1
复制代码
  1. =TRUE/1
复制代码
  1. =TRUE^1
复制代码
  1. =N(TRUE)
复制代码
这7个公式结果都等于1,说明 TRUE 是等于 1 的,
也说明,“1-TRUE”就等于“1-1”,结果等于0,也就是 FALSE。


(五)总结如下
四则运算中,TRUE=1,FALSE=0;
逻辑判断中,非0数值=TRUE,0=FALSE。
AND函数(不能返回数组结果),可用 * 代替(能返回数组结果);
OR函数(不能返回数组结果),可用 + 代替(能返回数组结果);
XOR函数(不能返回数组结果),可用 <> 代替(能返回数组结果);
NOT函数(能返回数组结果),可用 1- 代替(也能返回数组结果)。


(六)且看附件,欢迎指正
也谈逻辑.rar (9.82 KB, 下载次数: 54)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-21 21:05 | 显示全部楼层
谢谢星光兄评分,向你仰视,这么快就飙升为 超级版主 了呀!果然不同凡响。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-21 21:42 | 显示全部楼层
XOR结论是求异为真是正确的,但它支持数组。
  1. =XOR(ROW(1:10),ROW(1:10)-1)
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-22 16:06 | 显示全部楼层
满坛皆为吾师 发表于 2015-8-21 21:42
XOR结论是求异为真是正确的,但它支持数组。

我不这么认为。
将你的公式变一下,变成常数数组,再将第二个数组里的数值略加改动,使得第一、二两个数组异或后,正确结果既要有TRUE,也要有FALSE。
测试如下:
选中任意一列的10行单元格,输入多单元格数组公式:
  1. =XOR({1;2;3;4;5;6;7;8;9;10},{0;2;2;4;4;6;6;8;8;10})
复制代码
三键结束,得到的结果全部为TRUE,是错误的。

而输入如下多单元格数组公式:
  1. ={1;2;3;4;5;6;7;8;9;10}<>{0;2;2;4;4;6;6;8;8;10}
复制代码
三键结束,得到的结果是间隔的TRUE、FALSE、TRUE、FALSE、……,这个才是正确的。

所以,我还是坚持认为:
XOR 函数不支持数组(至少应该说:XOR 对数组进行运算,结果有误);
<> 运算符支持数组。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-22 16:11 | 显示全部楼层
4楼附件:
工作簿1.rar (6.74 KB, 下载次数: 42)

TA的精华主题

TA的得分主题

发表于 2015-8-22 16:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 满坛皆为吾师 于 2015-8-22 16:36 编辑
shenghua8 发表于 2015-8-22 16:06
我不这么认为。
将你的公式变一下,变成常数数组,再将第二个数组里的数值略加改动,使得第一、二两个数 ...

无需多单元,过程和结果是两个概念,<>所产生的结果是可以向下传递的内存数组,
XOR的结果是单值,这样是否理解。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-22 16:29 | 显示全部楼层

既然你明白XOR对数组进行异或返回单值,那就说明你知道,它仅仅是对两个数组的第一个值进行异或运算。

TA的精华主题

TA的得分主题

发表于 2015-8-22 16:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-8-22 16:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 满坛皆为吾师 于 2015-8-22 16:39 编辑
shenghua8 发表于 2015-8-22 16:29
既然你明白XOR对数组进行异或返回单值,那就说明你知道,它仅仅是对两个数组的第一个值进行异或运算。

=XOR({1,2,3,4,5},{1,2,0,4,5})
我们的理解点有差异,不讨论了,我估计我的理解也有问题,毕竟用得少,函数太复杂,现在一个SUM都还存在那么多问题,上张图
XOR.gif



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-22 16:39 | 显示全部楼层
本帖最后由 shenghua8 于 2015-8-22 16:40 编辑
满坛皆为吾师 发表于 2015-8-22 16:32
=XOR({1,2,3,4,5},{1,2,0,4,5})
我们的理解点有差异,不讨论了,我估计我的理解也有问题,毕竟用得少。


这么说,我明白了。
将两个数组分别当成两个个体,只要其内部稍有不同,就表示有差异,就为TRUE。结果为单值。
与我说的数组运算,是两回事。

看来,我要将“不支持数组”改为“不支持数组运算”。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-3 09:19 , Processed in 0.043258 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表