俗话说,尽信书则不如无书。换成现代的智能AI也一样,虽然它强大,但结果也不能全信。最近无意中发现chatGPT一个很扯的问题,竟连最基本的问题都能给出个错误答案,如果信了它就是扰乱视听了。
问题内容
c语言中==和&&优先级哪个高?
正确答案是什么?猜一猜chatGPT会给出什么答案?
类似1+1等于2这么简单的问题本身无意思,大佬们根本不会写出这样的代码。但这至少证明chatgpt有时是错的,不能太相信。当然我还是挺喜欢用它的,只是后续他给出的结果多怀疑一下,留点儿心罢了。
#include <iostream> using namespace std; int main() { cout<<"Hello World\n"; int a = 5,b = 1; if(a==5 && (b==1) ){ cout << "true"; }else{ cout << "false"; } return 0; }
当然类似这种容易模糊记混淆的加括号最保险。但有时候若习惯不好就搞出来bug了,比如信了这个gpt-3.5-AI,还故意生成错误答案。
问了两遍,都确信的给出以下答案,简直混淆视听,误导人类 !
一般的问题如10只鸡和10条腿一共几条腿,如果它回答错还能理解,很容易分辨。毕竟这训练出来的AI语言能力还行,但推理能力还不如小学生。但类似这种c语言基础知识,给出错误答案,着实容易误导人。即便你百度搜索下,网络上也是正确的结果占大多数吧,怀疑有时候它是故意的。
ndd的chatgpt插件回答
ndd(notepad--),一款不错的替代notepad++的记事本软件。
它上面的gpt插件,回答内容如下:
vscode的Bito回答
再换一个chatgpt插件Bito试试:
cursor神器的回答
据说cursor编程神器使用的可是最新的gpt-4,也来问问它吧,结果回答竟也是错的。
它的回答如下:
In C, the && operator has higher precedence than the == operator. This means that expressions containing both operators will be evaluated with the && operator first.
好在,我纠正了它的错误,它才意识到并解释了下,好在知错能改。
new bing的回答
最后,试试微软的最新的new bing,看看有没有奇迹。
虽说AI只能当做参考,肯定不能全信 。但是类似这个问题,这么基础的问题都能够给出错误答案,这AI有时还真不靠谱啊。
对比了下,还是微软的new bing,给出的是正确的答案,没有让人太失望。
正确答案
==的优先级更高。
所以,编程之中一定要牢记运算符的优先级问题,不可凭感觉自以为是,以免写出错误的代码。
c语言运算符优先级从高到低的顺序依次如下:
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。
不同类型的运算符之间也有相应的优先级顺序。
一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。
各种运算符间的优先级如下:数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。括号内的运算总是最优先计算。
引用
GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++