【C语言】移位操作符(>> <<),位操作符( & | ^),逻辑操作符(&& ||)的使用方法和总结

目录

十进制与二进制的转换:

原码,反码,补码

以上都是一些必备知识,这里简单介绍下。

移位操作符:(>>   <<)

左移操作符  <<  :

右移运算符:>>

位操作符(&    |     ^)

逻辑操作符: (&&  ||)

关于逻辑逻辑操作符的一道题目:


十进制与二进制的转换:

 相信看了这张图,多少会对二进制与十进制的转换有一点了解了。

原码,反码,补码

******在内存中存储一个数都是存的补码

******C语言中,0为假,非0为真。

******负数的符号位为1,正数的符号为0


以上都是一些必备知识,这里简单介绍下。

移位操作符:(>>   <<)

移位操作符的面对的操作对象主要是这个数的二进制位了。

且因为内存中存储的都是补码,所以在这个数是负数的时候注意要把它化成补码的形式。

左移操作符  <<  :

左移运算符:(主要是左边丢弃,右边补0)


正数的原,反,补码都是一样的
正整数的左移运算符:左边丢弃,右边补0


负整数的左移运算符:因为内存中存储的是数的补码,所以得先把负整数给化成补码
然后再左移,再左边丢弃,右边补0
再把移位后的补码给化成原码输出

右移运算符:>>

右移运算符:

有两种方式:


算术右移:右边丢弃,左边补原符号位

逻辑右移:右边丢弃,左边补0

到底是选择算术右移还是逻辑右移,取决于你当前使用的编译器。

***对移位运算符,尽量不要移动负数位,这是标准未定义的  

例如:>>-1 

这个到底是右移-1位还是左移一位,这是没有定义的。


位操作符(&    |     ^)

移位操作符的面对的操作对象主要是这个数的二进制位了。

且因为内存中存储的都是补码,所以在这个数是负数的时候注意要把它化成补码的形式。

&
按位与
全是1才是1
有0就是0

|
按位与
有1就是1

^
按位异或
相异为1,相同为0


逻辑操作符: (&&  ||)

&&
逻辑与        
全真为真
遇假则假

                            

||
逻辑或
有真为真

关于逻辑逻辑操作符的一道题目:

int main() {
	//经典面试题
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);




	return 0;


	//猜测输出结果,并且将a的值改变和将换个逻辑运算符来测试
}

可能很多人的答案是:1,3,3,5吧?因为刚开始做这个题我也觉得是这个。

但是这个是当a=1的时候才会是这个结果。

正确答案:输出为1,2,3,4

原因:因为这个使用的是逻辑与符号,则我们知道逻辑与是遇假则假。以上代码中a=0,为假,则逻辑或后面的运算也就不会再进行了。

这里,如果感兴趣的话,还可以讲其中的&&换成||,来考验下自己的对逻辑操作符的理解了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值