c位操作(高级第26章)
作用
在小内存时代,为了节省内存,一个字节经常被分成几个部分。
现在常用于网络数据传输和单片机领域。
注意:
任何位运算之前,任何表达式的结果首先都要转换成二进制,计算后切换回原始二进制就可以得到结果。.
不能对浮点数执行位操作。.
按位与
格式:二进制二进制。
例如:
int a=35
记忆法:在逻辑和运算中,两边的表达式为真,结果为真。因此,当执行按位“与”运算时,两位都为1,结果为1。
角色:
清除:要清除一个位,将相应的位设置为0,其他位设置为1,然后使用该操作。
取指定位:如果要取某一位,可以将对应位设为1,其他位设为0,然后使用该操作。
按位或
格式:二进制|二进制。
例如:
int a=3 | 5;
记忆法:在逻辑OR运算中,两边的表达式有一个为真,结果为真。因此,当执行按位“或”运算时,一位为1,结果为1。
角色:
将某个位置设置为1:要将某个位置设置为1,请将相应的位设置为1,然后使用|操作。
按位异或
格式:二进制二进制。
例如:
国际a=3^5;
记忆法:“不一样”的意思是不同的意思,异或实际上是判断两个数是否“不一样”,如果不一样就是真的。因此,在按位异或中,两个数字不同,结果是1。
定理:
1,任何数字及其异或都是0。
2.任何数字和0的异或值不变。
角色:
翻转位:翻转一个位,将对应位置设置为1,第一次使用操作翻转,第二次使用操作翻转回来。.早期的鼠标指针使用图形异或运算,所以速度非常快。
交换两个没有临时变量的值。.如果a=4和b=5,它们可以用下列语句互换:
a=a^b;
b=b^a;
a=a^b;
根据等价替换法,a=a b,那么b=b a等价于b=b (a b),b=b a b去掉括号,b=b=b^a项移位,根据定理1 b=0 a,根据定理2 b=a。
此时,b的值为4,而a只是一个中间值。
A=a b相当于a=(a b) (b a b),a=a b b a b去掉括号,a=a b b a b项移位,根据定理1 a=0 0 b,根据定理2 a=b。
此时A的值为5,交换结束。
程序1
矩阵异或
//26-1异或矩阵. c。
//翻转位:翻转一点,
//对应的位置可以设置为1,第一次操作可以翻转,第二次操作可以翻转回来。
#包含stdio.h
main()
{
//源矩阵
int a[4][4]=
{
{1,2,3,4},
{1,2,3,4},
{1,2,3,4},
{1,2,3,4}
};
//源矩阵
/*
int a[4][4]=
{
{8,8,6,6},
{8,8,6,6},
{6,6,8,8},
{6,6,8,8}
};
*/
//异或矩阵
int b[4][4]=
{
{0,3,3,0},
{3,0,0,3},
{3,0,0,3},
{0,3,3,0},
};
//输出源矩阵 和 异或矩阵
printf("输出源矩阵和异或矩阵\n");
for (int i = 0; i 4; i++)
{
for (int j = 0; j 4; j++)
{
printf("%d ", a[i][j]); //输出源矩阵
}
printf("\t");
for (int j = 0; j 4; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
//输出第一次异或后的矩阵
printf("第一次异或后的矩阵:\n");
for (int i = 0; i 4; i++)
{
for (int j = 0; j 4; j++)
{
a[i][j] ^= b[i][j];
printf("%d ", a[i][j]);
}
printf("\n");
}
//第二次异或后的矩阵 在次异或就会复原最初始的矩阵
printf("第二次异或后的矩阵:\n");
for (int i = 0; i 4; i++)
{
for (int j = 0; j 4; j++)
{
a[i][j] ^= b[i][j];
printf("%d ", a[i][j]);
}
printf("\n");
}
}
按位取反
格式:~二进制
如:int a=~3;
得到11111100,它是个负数。
左移
格式:二进制要移动的位数
如:
int a=32;
相当于000000112得到00001100
转成十进制后,a的值为12
作用:将二进制数左移一定的位数,最右边补0。任何一位移出左边界,自动丢弃。
※不越界的左移相当于让变量值乘以2。
右移
格式:二进制要移动的位数
如:
int a=122;
相当于000011002得到00000011
转成十进制后,a的值为3
作用:将二进制数右移一定的位数,最左边补0(或1)。任何一位移出右边界,自动丢弃。
※不越界右移相当于让变量值除以2。
注意:右移比左移要复杂些,如果要移的数为负数,最左边符号位为1,为了不改变此数的符号位,往右移的时候,左边会自动补1。
位运算的优先级:~ 高于 高于 高于^ 高于|
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/61503.html