这是有声音的视频,请检查播放器或者声音输出设备。
这次学习的内容:位运算(按位与,按位或,异或,求反,左移动,右移动)
//==================================
按位与( & )
#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位*/
}
}