C语言位运算

C语言位运算,第1张

C语言位运算 位运算
```
对于有符号的数而言 二进制数的特点:
	1.二进制的最高位是符号位:0表示正数,1表示负数
	2.正数的原码、补码反码都一样【三码合一】
	3.负数的原码=反码符号位不变,其他位取反、负数的反码=原码符号位不变,其他位取反【0->1 1->0】
	4.负数的补码=反码+1 、负数的反码=补码-1
	5. 0的反码和补码都是0
     ***6.在计算机运算的时候,都是采用补码的方式来运算【使用补码进行运算可以将正数和负数统一起来】【位运算是通过补码进行运算的,计算机的底层就是这么运算的】
     ***7.呈现在用户面前的是原码,最后的位运算结果也是原码
     ***8.最高位符号位不计入最终的结果中,只是单纯的表示为符号
对于无符号的数而言:没有负数,都是正数,三码合一
```
## 位运算符
	& 按位与 “与运算” 两个对应的数都为1 最后结果位1 否则为0 ==>类似 &&
	| 按位或 “或运算” 两个对应的数只要一个为1 最后结果为1 否则为0 ==>类似 ||
	^ 按位异或 “异或运算” 两个对应的数不相同 最后结果为1 否则为0 
	~ 按位取反 “取反运算” 1变0 0变1
	<< 按位左移运算 将一个运算对象的各二进制位全部左移若干位【左边丢弃 右边补0】
	>> 按位右移运算 将一个运算对象的各二进制位全部右移若干位【正数左补0,负数左补1,右边舍弃】



	## 练习
	3&2
		3的原码:00000000 00000000 00000000 00000011
		3的补码:00000000 00000000 00000000 00000011

		2的原码:00000000 00000000 00000000 00000010
		2的补码:00000000 00000000 00000000 00000010

		3的补码:00000000 00000000 00000000 00000011
		2的补码:00000000 00000000 00000000 00000010
	      3&2的补码:00000000 00000000 00000000 00000010 【正数】
	      3&2的原码:00000000 00000000 00000000 00000010 ==》2

	 -3|2
	 	-3的原码:10000000 00000000 00000000 00000011
		-3的反码:11111111 11111111 11111111 11111100
		-3的补码:11111111 11111111 11111111 11111101
		
		2的原码:00000000 00000000 00000000 00000010
		2的补码:00000000 00000000 00000000 00000010
		
		-3的补码:11111111 11111111 11111111 11111101
		 2的补码:00000000 00000000 00000000 00000010
	      -3|2的补码:11111111 11111111 11111111 11111111 【负数】
	      -3|2的反码:11111111 11111111 11111111 11111110
	      -3|2的原码:10000000 00000000 00000000 00000001 ==》-1


	
	~2==>对2进行取反 *** 作
		在位运算中:是对补码进行 *** 作的 又因为正数的三码合一,又因为2是int 占4个字节=32位
		2
		2的原码:00000000 00000000 00000000 00000010
		2的补码:00000000 00000000 00000000 00000010
		2的取反:11111111 11111111 11111111 11111101 【补码】【最高位为1 取反的结果为负数】
		2取反的反码:11111111 11111111 11111111 11111100
		2取反的原码:10000000 00000000 00000000 00000011 ==>原码是显示在电脑上的数:也就是最终的结果:-3
	2<<1
		2的原码:00000000 00000000 00000000 00000010
		2的补码:00000000 00000000 00000000 00000010
	     2<<1的补码:00000000 00000000 00000000 00000100 【正数】
	     2<<1的原码:0000000 00000000 00000000 000000100 =>4

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4654125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存