我想知道 ~ 操作数对 char 做了什么。示例代码:如果 var="a",则输出为 -1。
int ret (char var)
{
int x;
x=var|~var;
return x;
}
int main()
{
printf("%d",ret("a"));
return 0;
}
我不明白为什么它返回-1
首先"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'));
~操作员是negation具有身份的操作员-x-1。有逻辑(按位)否定和算术否定。C 用~. x=5以二进制为例:
x = 5
该~操作将产生以下效果:
~x = -5-1 = -6
在您的情况下'a'是97or 01100001,因此
~a = -97-1 (or -98)
对困惑感到抱歉