C语言----位运算,进阶篇二十六)

技术C语言----位运算,进阶篇二十六) C语言----位运算(进阶篇二十六)作用在小内存时代,经常把一个字节分成好几份来用,以达到节约内存的目的。现在经常用于网络数据传输,单片机领域……。注意:※在进

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

(0)

相关推荐

  • 一个动态波浪纹Android界面

    技术一个动态波浪纹Android界面 一个动态波浪纹Android界面IndexActivity.javapackage com.example.rubikrobot;import androidx.a

    礼包 2021年11月12日
  • 如何卸载软件,怎样卸载软件才能把软件卸载干净

    技术如何卸载软件,怎样卸载软件才能把软件卸载干净要保证卸载软件时彻底干净、没有残留,可以使用软件管家来卸载如何卸载软件。 由于有些应用软件在安装后,会在注册表中注册,同时还会自动生成附属的文件夹,在系统的控制面板中卸载软

    生活 2021年10月30日
  • 面向过程编程理论

    技术面向过程编程理论 面向过程编程理论面向过程编程过程就是流程的意思,即可以理解为先干什么再干什么然后干什么,注重过程基于该思想的编程就好比在一条流水线上,站在一个执行者的角度上面向对象编程(补充)面向

    礼包 2021年11月24日
  • 一窝小狗哪只最聪明,一窝中最小的狗狗智力怎么样

    技术一窝小狗哪只最聪明,一窝中最小的狗狗智力怎么样1一窝小狗哪只最聪明、最小智力最好,因为最小的是最晚出生,所以优良基因是最多,越早出生,优良基因越少
    2、大多数的智力高的动物,都是最晚出生的。
    1、介绍:狗,亦称“犬”

    生活 2021年10月24日
  • spark自定义sql系统(sparksql运行流程)

    技术如何将Spark SQL模型变为在线服务如何将Spark SQL模型变为在线服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Spark

    攻略 2021年12月17日
  • 如何查询mysql的引擎

    技术如何查询mysql的引擎这篇文章主要讲解了“如何查询mysql的引擎”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何查询mysql的引擎”吧!

    攻略 2021年12月9日