2

我想知道 ~ 操作数对 char 做了什么。示例代码:如果 var="a",则输出为 -1。

int ret (char var)
{
   int x;
   x=var|~var;
   return x;
}
int main()
{
  printf("%d",ret("a"));
  return 0;
}

我不明白为什么它返回-1

4

2 回答 2

2

首先"a"'a'不同。"a"传递字符串数组的地址"a"'a'传递 char a。所以你需要修改代码为

printf("%d",ret('a'));

一旦修改,varis 97which is0x00000061~varis -98which is 0xffffff9e

0x00000061| 0xffffff9e将是二进制补码的0xffffffff“-1” 。

如果需要0xffffffff,请%x改用 as

printf("0x%x",ret('a'));
于 2014-07-10T02:10:56.067 回答
1

~操作员是negation具有身份的操作员-x-1。有逻辑(按位)否定和算术否定。C 用~. x=5以二进制为例:

x = 5

~操作将产生以下效果:

~x = -5-1 = -6

在您的情况下'a'97or 01100001,因此

~a = -97-1  (or -98)

对困惑感到抱歉

于 2014-07-09T19:54:57.540 回答