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)

相关推荐

  • css如何引入外部样式表

    技术css如何引入外部样式表这篇文章将为大家详细讲解有关css如何引入外部样式表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 引入方法:1、使用link标

    攻略 2021年11月11日
  • Linux如何使用Supervisor管理后台进程

    技术Linux如何使用Supervisor管理后台进程小编给大家分享一下Linux如何使用Supervisor管理后台进程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.安装easy_install

    攻略 2021年11月3日
  • 7272好看动漫排行,你心目中的动漫排行榜前十名

    技术7272好看动漫排行,你心目中的动漫排行榜前十名1.机动战士高达00 2.新世纪福音战士
    3.铁臂阿童木
    4.多拉A梦
    5.名侦探柯南 在介绍点动漫给你 《死神》(打斗)
    《海贼王》(励志,打斗)
    《火影忍

    生活 2021年10月26日
  • mysql中索引配置如何优化

    技术mysql中索引配置如何优化这篇文章将为大家详细讲解有关mysql中索引配置如何优化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。2 索引及查询优化索引的类型普通索引:这是

    攻略 2021年12月8日
  • 怎么在CentOS 7下安装vnc

    技术怎么在CentOS 7下安装vnc小编给大家分享一下怎么在CentOS 7下安装vnc,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!VNC

    攻略 2021年11月15日
  • 如何深入分析Tomcat的Manager

    技术如何深入分析Tomcat的Manager如何深入分析Tomcat的Manager,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。关心Tom

    攻略 2021年12月8日