c - 类似位运算符之间的区别

标签 c bit-manipulation bitwise-operators

在提到按位运算符时,! 之间有什么区别?和〜?我觉得他们都翻转了位,但 1 可能会在最终答案上加 1?

~0xC4

compared to

!0xC4

谢谢!

最佳答案

! 不是按位运算符,而是 bool 运算符。

bool 运算符对真值进行操作,真值通常为 int。任何非零值都为真,而 0 为假。结果总是 1 表示真,0 表示假。

  • ! 不是 bool 值
  • && 是 bool 值和
  • || 是 bool 值或

这些是用于例如if 因为它需要一个 bool 值。 bool 和/或运算符也是短路的,这意味着它们在知道结果时停止评估。这很好,这意味着 1 || crash_and_burn() 永远不会崩溃和燃烧。

但是按位运算符当然会在提升等之后对整数类型参数的每一位进行运算。

  • ~ 不是按位
  • & 是按位和
  • | 是按位或
  • ^ 是按位异或 (xor)

按位运算符(当然)不是短路,这没有任何意义,因为它们只是对位对进行运算。请注意,虽然有 ^ 位运算符,但没有 ^^ bool 异或运算符。

关于c - 类似位运算符之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338928/

相关文章:

c - 从 void 指针访问结构成员时遇到问题。

c - 有趣的按位运算

c - 带 c 的双向套接字(非阻塞)

android - 由于 java 不正确,无法构建 android

c++ - _BitScanForward _BitScanForward64 缺失 (VS2017) Snappy

c++ - 这两个位运算符在做什么?

短裤上的 C# 按位运算 - 为什么要转换为 int?

python - 按位循环右移

c - 如何将指针传递给二维数组,其大小由C中的指针定义?

java - 将位的字符串表示形式转换为字节