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年10月24日
  • 狡猾的狐狸是什么歌,狡猾的狐狸是指什么意思

    技术狡猾的狐狸是什么歌,狡猾的狐狸是指什么意思不论在哪个国家狡猾的狐狸是什么歌、哪个民族,狐狸都是狡猾、奸诈、贪婪的形象。人们没有冤枉它,狐狸生来多疑,诡计多端。如果狐狸遭到猎人的枪击,没被击中,它会采取装死的办法,将身

    生活 2021年10月20日
  • mongodb副本集

    技术mongodb副本集 mongodb副本集服务器配置
    HOSTNAME IP 应用
    1-81 172.16.1.81 mongodb-3.6.23
    1-82

    礼包 2021年10月26日
  • Redis缓存的淘汰策略是什么

    技术Redis缓存的淘汰策略是什么这篇文章主要讲解了“Redis缓存的淘汰策略是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis缓存的淘汰策略是什么”吧!Re

    攻略 2021年10月27日
  • activity与task启动方式(tasker调用activity)

    技术怎么以singleTask的方式来启动SubActivity本篇内容主要讲解“怎么以singleTask的方式来启动SubActivity”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编

    攻略 2021年12月18日
  • http和https的区别有哪些

    技术http和https的区别有哪些这篇文章将为大家详细讲解有关http和https的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.了解http和https

    攻略 2021年11月12日