pragma mark 位运算
pragma mark 概念
/**
* 位运算是指按照二进制进行的运算,在系统软件中,常常需要处理二进制位的问题,C语言提供了6个位操作运算符,这些运算符只能用于整型操作数,即只能用于带符号或无符号的char、short、int与long类型
*
*/
pragma mark 代码
#include <stdio.h>
int main()
{
/**
& 按位与
| 按位或
^ 按位异或
~ 取反
*/
#pragma mark 位运算与
/*
按为与 &
规则
9 & 5 = ?
1001
&0101
-----
0001 // 二进制 1
规律: 任何数和1相&等到的结果还是那个数
1001
&1111
-----
1001
*/
printf("%i\n",9 & 5);
#pragma mark 位运算或
/*
按位或 |
规律: 一真则真
9 | 5 = ?
1001
|0101
-----
1101 = 13
*/
printf("%i\n",9 | 5);
#pragma mark 位运算异或 (异:不相同)
/*
按位异或 ^
规律:不相同为1,相同为0
9 ^ 5 = ?
1001
^0101
-----
1100 == 12
printf("%i\n",9 ^ 5);
重点:
规律: 异或的结果和参与运算的顺序没有关系
9 ^ 5 ^ 6 = ?
1001
^0101
----
1100
^0110
----
1010 == 10
5 ^ 6 ^ 9 = ?
0101
^0110
----
0011
^1001
----
1010 == 10
printf("%i\n",5 ^ 9 ^ 6);
规律: 相同的两个数异或等于0
5 ^ 5 = ?
6 ^ 6 = ?
0101
^0101
-----
0000
0110
^0110
-----
0000
规律 : 任何一个数异或上0结果不变
9 ^ 0 = ?
5 ^ 0 = ?
1001
^0000
-----
1001 == 9
0101
^0000
-----
0101 == 5
9 ^ 5 ^ 5 = ?
5 ^ 9 ^ 5 = 9 ^ 5 ^ 5 == 9 ^ 0 == 9
规律: 任何一个数异或上同一个数两次,结果不变
1001
^0101
----
1100
^0101
----
1001 == 9
*/
printf("%i\n",5 ^ 9 ^ 6);
#pragma mark 位运算取反
/*
取反 ~
~9 = ?
0000 0000 0000 0000 0000 0000 0000 1001
~1111 1111 1111 1111 1111 1111 1111 0110 // 补码 需要 转成反码 再原码
-0000 0000 0000 0000 0000 0000 0000 0001
----------------------------------------
1111 1111 1111 1111 1111 1111 1111 0101 // 反码
1000 0000 0000 0000 0000 0000 0000 1010 // 补码
原码 --> 反码(取反) --> 补码(+1)
补码 --> 反码(-1) --> 原码取反
*/
#pragma mark 位运算与
#pragma mark 位运算与
return 0;
}