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)

相关推荐

  • 轻量云服务器有什么优势

    技术轻量云服务器有什么优势随着现在对于云服务器的使用门槛不断降低,不少机房服务商都推出了自己的轻量云服务器,而相比云服务器,轻量云服务器的优势主要是入门简单,使用便捷,单击鼠标即可快速搭建云端环境或构建应用,开箱即用,那

    礼包 2021年12月10日
  • 11.6 3Python 第六章 函数

    技术11.6 3Python 第六章 函数 11.6 3Python 第六章 函数1.运行结果如右图,函数在定义时没有返回值,体现在return的位置错啦!
    其余错误:函数错误,修改后如下:2. 错误2

    礼包 2021年11月7日
  • 首页HTML

    技术首页HTML 首页HTML!DOCTYPE htmlhtml head meta charset="utf-8" / title/title link rel="stylesheet" typ

    礼包 2021年10月27日
  • 荸荠怎么煮,朋友送了好多马蹄怎么做菜

    技术荸荠怎么煮,朋友送了好多马蹄怎么做菜原料主料荸荠怎么煮:马蹄9个 梨1个 橘子1个 辅料:水适量调料:冰糖适量 详细步骤 1、将马蹄,梨,橘子洗好。
    2、马蹄梨削皮,橘子剥皮。
    3、将马蹄,梨切小块,锅中放水烧开

    生活 2021年10月25日
  • debug P命令跟踪程序时遇到Int 21使用P命令的分析

    技术debug P命令跟踪程序时遇到Int 21使用P命令的分析debug P命令跟踪程序时遇到Int 21使用P命令的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能

    攻略 2021年11月11日
  • 2021-2022-1 20211408 《信息安全专业导论》第八周学习总结

    技术2021-2022-1 20211408 《信息安全专业导论》第八周学习总结 2021-2022-1 20211408 《信息安全专业导论》第八周学习总结2021-2022-1 2021140

    礼包 2021年11月9日