c语言逻辑运算与位运算区别

c语言中,逻辑运算与位运算很容易混淆,但是它们的功能是完全不同的。逻辑运算认为所有的非零的参数都为TRUE,参数0表示false,它们返回1或0.

&&与||和&与|重要的区别是,如果第一个参数求值能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。

深入理解计算机系统第二章P36页,c语言中的逻辑运算答案

#include<stdio.h>

int main()
{
 int a= 0x66;
int b = 0x39;
printf("%x,%x,%x,%x,%x,%x,%x,%x",a&b,a|b,~a|~b,a&!b,a&&b,a||b,!a||!b,a&&~b);
 return 0;

}

依次为ox20,ox7f,oxffffffdf,ox01,0x01,0x00,ox01



逻辑运算包括左移和右移,其中右移又包括逻辑右移和算术右移

逻辑右移与算术右移区别:逻辑右移在左端补k个0,算术右移在左端补k个最高有效位的值

注意是单个移动,而不是作为整体,看下面的例子,每个[]进行移动,而不是[][]两个一起移动,对于无符号数据必须是逻辑的,对于有符号数默认是算术的

x = [01100011][10010101]

x>>4(逻辑右移)   [00000110][00001001]

          算术右移    [00000110][11111001] 



你可能感兴趣的:(位运算,c,逻辑运算)