有符号/无符号值与负值之间的比较

标签 c sizeof unsigned signed

程序 1:

#include <stdio.h>
int main()
{
    if (sizeof(int) > -1)
        printf("Yes");
    else
        printf("No");
    return 0;
}

输出:

程序 2:

#include <stdio.h>
int main()
{
    if (2 > -1)
        printf("Yes");
    else
        printf("No");
    return 0;
}

输出:

问题:

  1. 程序 1 和程序 2 有什么区别?
  2. 为什么 sizeof(int) 被认为是 unsigned
  3. 为什么程序 2 中的 2 被视为已签名

最佳答案

这是有符号和无符号整数之间常规算术转换的常见问题。 sizeof运算符返回 size_t 类型的值,这是一些实现定义的无符号整数类型,在 <stddef.h> 中定义(另请参见 this answer)。

整数常量 -1类型为 int .当size_t被实现为“至少”unsigned int (这很可能发生在你的情况下),然后是二元运算符的两个操作数 <被转换为无符号类型。无符号值不能为负,因此 -1被大量转换。

关于有符号/无符号值与负值之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890200/

相关文章:

C++ 解释将 uint64 转换为 uint32

visual-studio-2008 - 在 VB 2008 中,为什么操作短裤的时间比整数长?

c++ - OpenGL 核心和兼容性

c - 为什么我的测试用例总是失败?

c - linux proc大小限制问题

c - Sizeof 与 Strlen

objective-c - C 结构的大小

php - 在交易分类帐表中存储有符号或无符号的值

c - C 中的 Printf 混淆

c++ - sizeof 是做什么的?