c - 按位或不运算符如何工作?

标签 c

#include<stdio.h>
void main()
{
  int a, b, c;
  a=5;
  b=8;
  c= ~(a|b);
  printf("%d",c);
} 

预期输出为 -13 但结果显示为 -14- 14 怎么样? .

最佳答案

因为你有一台 2 的补码计算机。

  • 5 | 8 给出二进制 0101 | 1000 = 1101 = 12 月 13 日
  • ~ 反转它,你会得到 1111....0010
  • 将其表示为有符号类型,那么在 1 的补码中,这将是 -13 dec。
  • 但是对于 2 的补码,我们减去 1 得到 -14 dec。

出于与 ~0 相同的原因,给出 2 的补码 -1 而不是 -0

关于c - 按位或不运算符如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55692102/

相关文章:

c - execvp 查找通配符-名称 "*.c"

c - 返回一个指向动态分配结构的指针还是需要从调用函数分配内存?

c - 如果我强制第一个和最后一个为 10 长度字符串中的字母,如何强制用户在字符串中仅插入数字?示例 S2351566A

c# - 将断言输出从 dll 重定向到文件

c - 是否保证将 -1 分配给无符号类型会产生最大值?

c - 在C中生成两个不同的随机数

c - 为什么我们在运行Perl脚本时需要使用chmod赋予可执行权限,而在运行c程序时却没有这样做?

c - 堆栈问题: Local variables vs Arithmetics

C - 在另一个控制台应用程序中运行控制台应用程序

c - 使用 fscanf 计算单词出现的次数