【问题标题】:What happend when operator is >,+ and two operators is unsigned int,char [duplicate]当运算符是 >,+ 并且两个运算符是 unsigned int,char 时发生了什么 [重复]
【发布时间】:2023-02-08 22:24:21
【问题描述】:
#include <stdio.h>

int main() {
    unsigned int n = 10;
    char m = -1;
    if (m < n)
        printf("m < n\n");
    else
        printf("m > n\n");
    printf("m + n = %u", m + n);
}

当我在 Windows 上的 MinGW64 中运行此代码时。它打印“m > n”,“m + n = 9” 我不明白为什么“m + n = 9”和“m > n”。

【问题讨论】:

  • char不保证一定会被签到。您可能有一个未签名的 char 类型,所以 -1 实际上是 255。
  • @Jason 在这种特定情况下,签名无关紧要。 unsigned char 应该给出相同的结果 m &gt; n。和signed char一样。
  • @Lundin,你是对的。那是非常不直观的。
  • @ikegami 在发布/编辑历史中。但我想这个问题中有一个特定的问题,unsigned char 给出值 0xFF 但 signed char 0xFFFFFFFF 因为在前一种情况下,符号转换发生在赋值时,而在后一种情况下,符号转换发生在隐式提升时。
  • 我也将“is char signed”规范欺骗添加到重复列表中,因为它对 9 vs 256 结果很重要。

标签: c


【解决方案1】:

我不明白为什么“m + n = 9”和“m > n”。

您只能比较兼容的整数,所以 char 被转换为 unsigned int,它的值是(假设 32 位整数和两个补负整数)0xffffffff,这比 10 大得多。

添加时char被转换为int,添加后结果被转换为unsigned int。

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 2013-12-02
    • 2013-06-27
    • 2011-04-18
    • 1970-01-01
    • 2020-01-25
    • 2018-11-18
    • 2018-02-22
    相关资源
    最近更新 更多