位运算符
| 运算符 | 作用 | 示例 |
|---|---|---|
| & | 按位与 | 两个操作数同时为1结果为1 |
| | | 按位或 | 两个操作数只要有一个为1,结果就为1 |
| ~ | 按位非 | 操作数为1,结果为0;操作数为0,结果为1 |
| ^ | 按位异或 | 两个操作数相同,结果为0;不相同结果为1 |
| << | 左移 | 右侧空位补0 |
| >> | 右移 | 左侧空位补符号位 (右移,正数,除2,负数,减一除2。 无符号数也是正数) |
-
凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte)
-
一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位
-
如果开辟1G的空间大小,使用malloc(1<<30)
- 1M malloc(1<<20)
- 1K malloc(1<<10)
-
左移:为最高位丢弃,低位补0,相当于乘2
-
右移:为最低位丢弃,高位补0,相当于除2
-
负数: 右移对于偶数来说,是除2,但是对于奇数来说,先减一,在除2
- 例如: -8>>1 得到-4 -7>>1 得到是-4,并不是-3 -1无论右移多少位,值永远都是-1
-
任何正数按位取反,就是这个数的负数减一
- 例: int i = 5; ~i; // -6
-
不用循环的到任何一个数,最低位为1的那个数?
- 把它和它的负数按位&一下就得到了
-
异或(相同的数,异或为0,任何数和0异或就为本身)
5^7 = 2
0000 0000 0000 0101
0000 0000 0000 0111
=
0000 0000 0000 0010
i=i^j;
-
任何数和自身异或。得到0
-
任何数和0异或,得到自身
int arr[]={2,8,3,4,7,9,0,1};
int n = sizeof(arr)/sizeof(int);
printf("n = %d\n",n);
for (i = 0; i < n; ++i) {
printf("%d ",arr[i]);
}
printf("\n");
for (k = 0; k < n-1; ++k) {
for (m = 0; m < n-k-1; ++m) {
if(arr[m] < arr[m+1])
{
/*
int temp = arr[m];
arr[m] = arr[m+1];
arr[m+1] = temp;
*/
arr[m] = arr[m] ^ arr[m+1];
arr[m+1] = arr[m] ^ arr[m+1];
arr[m] = arr[m] ^ arr[m+1];
}
}
}
- 逗号表达式的值是最后一个变量的值
浙公网安备 33010602011771号