U8 加 5 变成 4;0x12345678 进 U16 只剩 0x5678;Implies 不是 AND。第 2 讲 125 题里最值钱的三道。
第 2 讲 125 道题,考三件事:类型转换会不会改变数值、布尔节点到底怎么算、同一个数换个显示还是不是同一个数。题目里但凡出现 U8/I32/DBL 这类前缀,先想「范围」,再想「运算」。
坑一:U8 加 5,结果是 4
2-01 里两个 U8 输入,一个 255,一个 5,相加后输出还是 U8。答案是 B:4。
255 + 5 = 260,可 U8 只能装 0--255。超出的部分不会报错,直接回绕:260 − 256 = 4。
U8/I16 这类整型溢出是「静默回绕」,不是饱和,也不是报错。
坑二:强制点不是四舍五入,是截断
2-12 把一个常量 0x12345678 接到 U16 指示器上,中间自动出现一个强制点。答案是 B:0x5678。
强制点只保留目标类型放得下的位:U16 装 16 位,就取低 16 位 0x5678,高 16 位 0x1234 直接丢掉。它不四舍五入,也不报错。
浮点转整型同理:2.9 进 I32 是 2,不是 3。
强制点做的是「截断」,不是「转换数值」。
坑三:Implies 不是 AND
2-13 两组布尔值过 Implies(⇒)节点:T⇒F 和 F⇒T。答案是 B:FALSE、TRUE。
Implies 的定义是「前件成立时,后件必须成立」:T⇒F 是唯一的假;F⇒T 算真(前件不成立,整句没有被推翻)。它等价于 NOT A OR B。
看到 ⇒ 先换成 NOT A OR B,再算。
这一讲怎么用
第一,2-01、2-12、2-13 三道先做两遍,分别对应「溢出」「截断」「布尔」。
第二,只要题里出现类型前缀,先算范围:U8 是 0--255,I16 是 −32768--32767,U16 是 0--65535。范围一算,溢出题基本就定了。
第三,布尔题别背符号,换成文字:「与」= 都真才真,「或」= 一个真就真,「蕴含」= 前真后假才假。
最后
你在第 2 讲错得最多的是哪一种:溢出回绕、强制点截断,还是布尔符号?评论区说说,我按投票最多的做下一期。
题目来源:NI Daily CLAD 社区每日一题;中文标注为本套例题册整理,解析保留原帖思路、仅做中文转述。第 2 讲共 125 题,建议用时 150 分钟。