这是有声音的视频,请检查播放器或者声音输出设备。

这次学习的内容:位运算(按位与,按位或,异或,求反,左移动,右移动)

//==================================
按位与( & )

#include <stdio.h>

main()
{
int a=9, b=5, c;

c = a&b;

printf( "a=%d b=%d c=%d \n", a, b, c );

}

-----
00000000000000000000000000001001
00000000000000000000000000000101
----------------
00000000000000000000000000000001    (十进制1)

做一个 & 运算, 只有当2个为1的时候才为1

//=========================================
按位或 ( | )

#include <stdio.h>

main()
{
int a=9, b=5, c;

c = a|b;

printf( "a=%d b=%d c=%d \n", a, b, c );

}
-------------
00000000000000000000000000001001
00000000000000000000000000000101
----------------
00000000000000000000000000001101    (十进制13)

只要有一个为1, 结果都为1

//==============================================
按位异或 ( ^ )

#include <stdio.h>

main()
{
int a=9, b=5, c;

c = a^b;

printf( "a=%d b=%d c=%d \n", a, b, c );

}

-------------
00000000000000000000000000001001
00000000000000000000000000000101
----------------
00000000000000000000000000001100    (十进制12)

只有 1和0 , 才会为1 。 如果2个0或者1,都为0

//============================================
求反运算符

例如 printf( "%d \n", ~9 );

我们知道 9 对应的二进制补码是         00000000000000000000000000001001

那么 求反,也就是 0为1,1为0 最后结果     11111111111111111111111111110110 (十进制-10)

//==========================================

左,右移动运算 ( << ,>> )

int a=9;

printf( "%d \n", a<<2 );

9 对应的二进制补码是00000000000000000000000000001001

向左移动2位, 右边补上 2个0

00000000000000000000000000100100    (十进制36)

------------------------

9 对应的二进制补码是00000000000000000000000000001001

向右移动3位, 左边补上 3个0

00000000000000000000000000000001    (十进制1)

视频就到这里结束了, 大家了解它是转化成 二进制补码进行运算的。88

//=========================================
我这里在网上找一个代码, 能把十进制数转为二进制补码

#include<stdio.h>
void printb(int,int);
main()
{
int x;printf("Input number:");
scanf("%d",&x);
printf("number of decimal form:%d\n",x);
printf("      it\'s binary form:");
printb(x,sizeof(int)*8);  /*x:整数  sizeof(int):int型在内存中所占的字节数
sizeof(int)*8:int型对应的位数*/
putchar('\n');
}

void printb(int x,int n)
{
if(n>0)
{
putchar('0'+((unsigned)(x&(1<<(n-1)))>>(n-1)));
printb(x,n-1);      /*归调用,输出x的后n-1位*/
}
}


“linux_C语言_12 位运算(按位与,按位或,异或,求反,左移动,右移动)”没有评论

有任何疑问或建议,可以给作者留言:



公告:

  • 2010年5月之前的视频是文字解说演示,没有声音。
  • 2010年5月以后的视频全部带声音。