C语言-按位逻辑运算符和位移运算符

按位逻辑运算符

& 逻辑与
| 逻辑或
^ 逻辑异或
~ 反码
  • 按位与运算符(bitwise AND operator) a & b 按位计算a和b的逻辑与;
  • 按位或运算符(bitwise inclusive OR operator) a | b 按位计算a和b的逻辑或;
  • 按位异或运算符(bitwise exclusive OR operator) a ^ b 按位计算a和b的逻辑异或;
  • 按位反运算符(~operator) ~a 计算a的反码(将每一位取反之后的值);

a & b 两者都为1时结果为1;
a | b 只要有一个为1,结果就为1;
a ^ b 有且只有一个为1结果才为1;
~a 如果是0则结果为1,如果是1则结果为0;

这些运算符的操作数必须是整数类数据类型或者枚举型。如果应用于浮点型等数据类型的操作数,编译时就会出错。

逻辑运算符和按位逻辑运算符区别

&, |, ~运算符会根据1为真,0为假的规则对操作数的各二进制进行逻辑运算。
&&, ||, !运算符会根据非0为真,0为假的规则对操作数的值进行逻辑运算。

5 & 4 -> 4           5 && 4 -> 1

位移运算符

<<运算符 a << b 将a左移b位,右面空出的位用0填充。

a * 2^b

>>运算符 a >> b 将a右移b位

a / 2^b

当操作数是有符号整型的负数时,位移运算的结果因编译器而已。在许多编译器中,会执行逻辑位移(logical shift)算术位移(arithmetic shift)

无论采用哪种方法都会降低程序的可移植性,所以不要对负数进行位移

有符号整数的内部表示

用最高位表示数值的符号。

如果该数为负,则符号为1;
如果该数不为负,则符号为0;

推荐阅读更多精彩内容

  • 2005年11月6日是你们出道的日子,但并不是我见到你们的第一天。 那时我才上初中,同学风风火火地跑进教室递给我一...
    李白洋阅读 24评论 1 1
  • 在外人看来HR是掌握求职者“生杀大权”的人,是个很傲娇的职业,其实不然,只有做过HR的人才能真正理解这份工作的苦衷...
    奕橙阅读 2,548评论 18 39
  • 清旷的浅水之上,伫立着苍苍芦苇。 秋晨,微风清凉,雨丝飞洒,顶上洁白的芦花随风尽情摇曳着,婀娜多姿...
    半生倾阅读 80评论 0 0
  • 看到明天有早自习,有课,内心是紧张的,但不得不平静下来,因为该面对的终要面对。勇敢自信从容。 今早六点过一些醒来,...
    凌月Ly阅读 53评论 0 0
  • 作为一个正常的人应该是忍受不了悲惨的,无论这个悲惨是来自外界还是你自己。但是总有那么一些变态(对我这里用了这个恶劣...
    陈苡安阅读 137评论 0 0