前言
记录6月11日,肯哥在群里面分享的一个问题。说实话,看到题目想了半天没明白。一看答案,才发现,这题真的简单。
题目
已知一个整数,如何判断这个整数是无符号的?
题解
(1)因为我的思路完全是错误的,我就不再此进行乱分析了。肯哥给出的提示是:C语言中的与、或、非、异或等手段是个好东西。感兴趣的可以在此思考一下。
(2)答案揭晓,是群里面一个大佬说的a > 0 且 ~a > 0。不得不承认差距,一下子就体现出来了,自己还有很多要学习的。 肯哥给出的答案是
#define ISUNSIGN(A) ((A)>=0 && ~(A)>=0)
(3)这个是利用进行取反之后,符号位也会随着取反。说实话,这个知识点我给记混淆了,以为符号位不会取反。
(4)首先,因为如果一个数为负数,那么他铁定就是有符号的数据了。
(5)其次,‘~’进行位取反。同时符号位也会改变。如果对于无符号类型数据,是没有影响的,因为无符号数据是不存在负数的。而如果是有符号数据,那么正数就会变成负数。因此无法通过判断。
总结
(1)C语言的知识点太多了,很容易忘记。我翻了一下我的博客,居然还有专门讲解逻辑取反和算数取反的内容。(哭笑)
(2)知识要反复巩固,今天又学到了一点东西。开心