逻辑运算位运算

1、原码、反码、补码、移码

原码、反码、补码

  • 正数:正数的原码、反码、补码是相同的
  • 负数:
    • 原码:最高位表示的是符号位,负数符号位为1正数的符号位为0
    • 反码:负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
    • 补码:补码=反码+1;符号位可以被进位。
    • 移码:补码的基础上将符号位取反。移码只能用于表示整数,不能表示小数
    • 补码装换为原码:与原码转换为补码相同:–>反码+1;

2、二进制、八进制、十进制、十六进制之间的转换

二进制、八进制、十进制、十六进制之间的转换

3、浮点型十进制转换

浮点型十进制转换

4、负数二进制转换

负数二进制转换

5. 逻辑运算

何为真? : 一切非零值为真;
何为假?: 0 代表假;

1. 逻辑与 &&

当且仅当两个运算对象为真(非零)时结果为真;

int x=100;
int y=50;
cout<<(x&&y)<<endl;	//1

int x=100;
int y=0;
cout<<(x&&y)<<endl;	//0

2. 逻辑或 ||

只要两个对象中一个真(非零)结果就为真;

int x=100;
int y=0;
cout<<(x||y)<<endl;	//1

int x=0;
int y=0;
cout<<(x||y)<<endl;	//0

3. 逻辑非 !

将运算对象的值取反后返回;
** 非 0 取反 ⇒ 0; 0 取反⇒ 1; **

int x=100;
cout<<(!x)<<endl;	//0

int x=0;
cout<<(!x)<<endl;	//1

此处值取反按位取反是不同的,按位取反需要转换为二进制,再进行按位取反;

6. 位运算

将其转化为 二进制在进行位运算;

1. 位与 &

35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
&
————————————————————
35:  0 0 1 0 0 0 1 1

 int x=35;
 int y=47;
 cout<<(x&y)<<endl; //35

2. 位或 |

35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
|
————————————————————
47:  0 0 1 0 1 1 1 1

 int x=35;
 int y=47;
 cout<<(x|y)<<endl; //47

3. 位取反 ~

35:  0 0 1 0 0 0 1 1
~
————————————————————
92: 1 1 0 1 1 1 0 0  //第一位是符号位
 int x=35;
 cout<<(!x)<<endl; // -36

从上面可以看出 35 取反后程序输出与 按位取反的结果不一致?
由于负数在计算中一般用补码表示:所以我们应该将取反得到在原码转换为补码

35:  0 0 1 0 0 0 1 1
~
————————————————————
92: 1 1 0 1 1 1 0 0  //原码

		 1 0 1 0 0 0 1 1	//反码 :符号位不变,其余位取反
		+1
	————————————————————
	-36: 1 0 1 0 0 1 0 0  //第一位是符号位

4. 位异或 ^

相同取0 ,异同为1;

35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
^
————————————————————
12:  0 0 0 0 1 1 0 0

int x=35;
int y=47;
cout<<(x^y)<<endl; // 12
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值