【问题标题】:What does sizeof(int) return in this case?在这种情况下 sizeof(int) 返回什么?
【发布时间】:2014-10-28 13:00:57
【问题描述】:
#include<stdio.h>
#include<conio.h>

void main()
{   
    if(sizeof(int)>=-2)    
        printf("True");
    else
        printf("False");
}

当我尝试使用 Turbo C++ 编译这段代码时,它返回 False 而不是 True 。 但是当我尝试打印 int 的值时,程序返回 2。

这怎么可能?而 sizeof(int) 正在返回 2 并且是 2>=-2 。

【问题讨论】:

标签: c++ c sizeof turbo-c++


【解决方案1】:

sizeof(int) 被替换为std::size_t 类型,它在大多数实现中是无符号

比较有符号和无符号会导致奇怪的结果,因为有符号被提升为无符号。

您可以获得如下所示的合理结果

if(static_cast<int>(sizeof(int)) >= -2)

如果您正在使用 C 编译器

if((int)sizeof(int) >= -2)

例如,使用一些警告标志-Wall 编译您的代码最有可能警告有符号/无符号比较。 (如果您不忽略警告)

【讨论】:

  • 任何体面的编译器都会警告你。
  • @dandan78:问题不在于一个像样的编译器。
  • std::size_t 是标准要求的无符号类型。
  • 能否请您为我重新编写代码以使其返回 true。提前致谢。
  • if(1) 将是获得合理结果的另一种方式,因为sizeof 永远不会给出否定结果
【解决方案2】:

sizeof 的类型是 size_t (typedef unsigned int size_t)。 unsigned int 与签名相比可能会导致错误答案。

【讨论】:

  • 不一定是unsigned intunsigned longunsigned long long 可能同样频繁,甚至更多。唯一的要求是它是无符号整数类型。
  • 能否请您为我重新编写代码以使其返回 true。提前致谢。
  • 在 64 位系统上很可能是 unsigned longunsigned long long
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2014-09-12
  • 2018-04-26
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多