如何解决比较C和C ++中不同有符号性的表达的危害是什么?
我经常将gcc和g ++与-Wall和-Wextra标志一起使用,因为我不希望我的代码包含任何警告。有时我理解为什么我应该解决编译后出现的警告的原因,而另一些时候我不知道。一个示例是以下警告:
warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
为解决此警告,我检查了int
(或unsigned int
,取决于情况)的一致性,并将一种类型转换为另一种类型。我的问题是:不执行此检查可能有什么危害?
解决方法
整数和无符号整数具有相同的位数。但是,对于有符号整数,由于一个人的补码(和c ++ 20的两个补码)的工作方式,第一位可以解释为“符号位”:当它为1时,数字为负。>
因此,以1作为第一位的无符号整数是一个很大的数,而以1作为第一位的有符号整数是一个负数。因此,无法将两个数字进行比较,这就是为什么必须提供显式转换的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。