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] 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值