【问题标题】:signed and unsigned in C [closed]在C中签名和未签名[关闭]
【发布时间】:2013-08-10 07:57:52
【问题描述】:

代码是:

#include<stdio.h>
int main()
{
    signed x,a;
    unsigned y,b;

    a=(signed)10u;
    b=(unsigned)-10;

    y = (signed)10u + (unsigned)-10;
    x = y;

    printf("a=%d, b=%u",a,b);

    if(x==y)
        printf("\nx=%d, y=%d",x,y);
    else if(x!=y)
        printf("\nx=%u, y=%u",x,y);

    return 0;
}

输出是:

a=10, b=65526
x=0, y=0

请解释这个输出。我正在研究 Turbo C。

【问题讨论】:

  • 你尝试解释一下输出怎么样?
  • 我无法理解为什么在这种情况下 y 的值为 0。
  • 但是您还没有发布任何尝试或推理……将问题分解为步骤……
  • 一个有用的建议——不要使用tubo C
  • Turbo C 是古老的,16 位的,应该有 0 理由使用它。 GCC 几乎在各个方面都优于 Turbo C。

标签: c casting int unsigned signed


【解决方案1】:

y = 10 + 65526 = 65536 = 0(模 16 位)。

您必须记住,在一天结束时,无论有符号还是无符号,都只是分配给内存位置的位。如何解释它们可以是一个问题或上下文。因此,将 -10 写入无符号变量与将 65526 写入相同。

【讨论】:

  • 是的,我在你发表评论之前就知道了,我把它写在上面的 cmets 中。但无论如何,谢谢。 :)
  • @Himanshu Aggarwal - 您至少可以为 Jim 投票并将他的回答标记为“已接受”。恕我直言...
猜你喜欢
  • 2010-10-03
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2021-12-06
  • 2011-04-30
  • 2023-03-09
相关资源
最近更新 更多