【问题标题】:the result in c flipped to negative numberc中的结果翻转为负数
【发布时间】:2022-01-20 12:37:30
【问题描述】:
 unsigned int x;
 unsigned int y;
 x = 0x66;
 y = 0x39;
 unsigned z;
 z =  ~x | ~y;
 printf("%d\n",z);

我的代码是这样的,我想计算~x | 〜y,我将z定义为无符号,但z仍然是负数。为什么?这是〜x中的问题吗,那么计算机中的〜x操作是什么。 谢谢

【问题讨论】:

  • 我的结果是-33,我不知道为什么
  • %d 将其输入打印为 signed。你想要%u
  • @YifanHu 提示:不要只是问为什么数字不符合预期,还要发布你所期望的值。

标签: c++ c operating-system


【解决方案1】:

您告诉printf 打印签名输入,因此它将相应地解释其输入。试试printf("%u\n", z);。

【讨论】:

  • @YifanHu: 2^32-1 是 4294967295,而不是 4294967263。在我看来,4294967263 实际上是正确的结果。
  • 我真的不确定你对什么感到困惑,但你有 x = 0x00000066 和 y = 0x00000039。因此,倒置后,它们变为0xffffff99 和0xffffffc6,其OR 为0xffffffdf,或十进制的4294967263。
  • @YifanHu 也许您需要将结果截断为您需要的位数。例如。 z = (~x | ~y) & 0xff; 将结果截断为 8 位,z = (~x | ~y) & 0xffff; 将结果截断为 16 位,等等。
  • @YifanHu • ...否定操作...在提供的代码中没有否定 -。提供的代码使用 bitwise NOT ~(又名按位inversion,或按位complement)。
  • @Eljay:这是极端的迂腐,称之为否定并不少见。如果您在网上搜索“按位求反”或“逻辑求反”,您会发现大量来自可靠来源且理由充分的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
相关资源
最近更新 更多