加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我的电脑认为signed int小于-1?

发布时间:2020-12-16 01:56:10 所属栏目:安全 来源:网络整理
导读:参见英文答案 Why is (sizeof(int) -1) false? ????????????????????????????????????3个 ???????????? Comparison operation on unsigned and signed integers????????????????????????????????????7个 #include stdio.hint main(void){ printf("%d",sizeof
参见英文答案 > Why is (sizeof(int) > -1) false? ????????????????????????????????????3个
>???????????? Comparison operation on unsigned and signed integers????????????????????????????????????7个

#include <stdio.h>
int main(void)
{
    printf("%d",sizeof(signed int) > -1);
    return 0;
}

结果为0(FALSE).
怎么会这样?
我使用的是64位ubuntu linux,结果应该是(4> -1)=> 1 =>真正.

解决方法

sizeof(signed int)的类型为size_t,这是一种无符号类型.当您在有符号值和无符号值之间进行比较[并且无符号值的类型至少与有符号值的类型一样大]时,在比较之前将有符号值转换为无符号值.此转换使-1成为无符号类型的最大可能值.换句话说,就好像你写的那样

#include <limits.h>
/* ... */
printf("%d",sizeof(signed int) > SIZE_MAX);

当你犯这个错误时,你可以让gcc警告,但默认情况下它甚至没有打开 – 你需要-Wextra或更具体的-Wsign-compare. (这个警告会产生很多误报,但我认为打开新代码很有用.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读