C语言位运算

来源:互联网 发布:最短路问题的floyd算法 编辑:程序博客网 时间:2024/06/05 11:38
#include <stdio.h>


// & 位且
//11 1 
//01 0
//10 0
//00 0


// 1001 0011 
// 1111 0000
// 1001 0000
//&无论是0还是1 和0相&结果就为0
//无论是1还是0  和1相&结果就不变


//xxxx xxxx
//1111 0111 //那么第五个就一定是0


/*

   x          y

1010 1011 //取y坐标
0000 1111
0000 1011 //取出y坐标


1010 1011 //取x坐标
1111 0000 
1010 0000 //取出x坐标
右移4位
*/
void main1()
{
unsigned int ch=255;//1111 1111 
unsigned int nch=15;//0000 1111
//0000 1111
unsigned int rch=ch&nch;
printf("%d\n",rch);

}


#include <stdio.h>




// | 位或
// 11 1
// 01 1  | 上1就变成1


// 10 1
// 00 0  | 上0就不变
// XXXX XXXX
// 0000 1000//第五位一定为1






// |无论是0还是1|上1就会变成1
// |无论中0还是1|上0就不变
void main3()
{
unsigned int ch=255;//1111 1111 
unsigned int nch=15;//0000 1111
//1111 1111
unsigned int rch=ch|nch;
printf("%d\n",rch);


}

#include <stdio.h>


//^ 异或
// 11 0 
// 01 1
// 10 1
// 00 0
//同性为0  负性为1


//11 0
//01 1
//无论1还是0 只要与0相异或就不会变化
//要是异或1那么就为反转
// 1011 0111
// 0000 1111
// 1011 1000 //将5到8位进行反转
void mainA()
{
unsigned int ch=255;//1111 1111 
//unsigned int nch=15;//0000 1111
//1111 0000
unsigned int nch=0;//0000 1111
unsigned int rch=ch^nch;
printf("%d\n",rch);


}


void mainB() //交换数据
{
int a=10;
int b=20;
printf("a=%d,b=%d\n",a,b);
a=a^b; 
//0000 1010
//0001 0100
//0001 1110 a=0001 1110
b=a^b;
//0001 1110
//0001 0100
//0000 1010 b=0000 1010
a=a^b;
//0001 1110
//0000 1010
//0001 0100 a=0001 0100
printf("a=%d,b=%d\n",a,b);



}



#include <stdio.h>




void main2()
{

// 1 在你内存就是4个字节 32位 
// 0000 0000 0000 0000 0000 0000 0000 0001
// 1111 1111 1111 1111 1111 1111 1111 1110
//ch赋值时赋值号进行了转换
{
unsigned char ch=~1; //将小类型保存大类型就会被截断
//取反
// 0000 0001
// 1111 1110
printf("%d\n",ch);
}


{
unsigned int a=~1;
printf("%u\n",a);
}



}


#include <stdio.h>




void mainC() //右移
{
int a=1;
//0000 0001
//0000 0000 1 //结果为0 

int b=1000;
//右移就说明除以2
printf("%d\n",a>>1);
printf("%d\n",b>>1);
printf("%d\n",b>>2);
printf("%d\n",b>>3);
printf("%d\n",b>>4);
}




void mainD()
{
//int a=11;
//0000 1011
//0001 0110

//0000 0001   255
//1 0000 000  256  //位移越界保留左边 
unsigned int a=1;
//左移就说明乘以2
printf("%d\n",a<<1);
printf("%d\n",a<<2);
printf("%d\n",a<<3);
printf("%d\n",a<<4);
printf("%d\n",a<<5);
printf("%u\n",a<<32);
}


#include <stdio.h>


void main()
{
unsigned char ch1=1; //0000 0001
unsigned char ch2=3;//0000  0011
unsigned char ch3=ch1&ch2; //ch1 & ch2 结果保存在寄存器EAX
ch1&=ch2; //ch1变化了寄存器的结果赋值给内存
ch1^=ch2;// ch1=ch1^ch2
ch1|=ch2;//ch1=ch1|ch2
ch1>>=ch2;//ch1=ch1>>ch2
ch1<<=ch2;//ch1=ch1<<ch2
//ch1<< =ch2
//符合赋值运算符中间不可以加空格
//ch1~=ch2;//~取反运算符是单目运算符不可以进行符合赋值运算




}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 l岁宝宝吃多了怎么办 3个月婴儿厌食怎么办 11个月婴儿厌食怎么办 7个月的婴儿厌食怎么办 小孩记忆不好读书记不住怎么办 9岁儿童不爱睡觉怎么办 6岁儿童不爱吃饭怎么办 2岁半宝宝不吃饭怎么办 一年级的孩子不爱学习怎么办 小孩不爱写作业怎么办啊 孩子不爱看书怎么办如何教育 2岁宝宝不爱看书怎么办 儿媳妇比儿子年龄大我不喜欢怎么办 不喜欢儿子却生了儿子怎么办 静不下心来看书怎么办 孩子爱玩不爱学怎么办 孩子爱玩不爱学习怎么办 孩子爱玩手机不爱学习怎么办 照四维宝宝太活泼了怎么办 胎宝宝太活泼了怎么办 7个月宝宝太活泼怎么办 我是个初中生不想上学怎么办 3岁宝宝不肯说话怎么办 两周宝宝不爱吃饭怎么办 小孩不喜欢吃水果蔬菜怎么办 孩子对学习不感兴趣怎么办 幼儿园老师不喜欢我孩子怎么办 孩子数学不主动思考问题怎么办 孩子做事慢磨蹭家长应该怎么办 孩子不写作业怎么办啊 对孩子在校被欺怎么办 二年级的孩子不爱学习怎么办 孩子不爱学习怎么办二年级 二年级孩子不爱写作业怎么办 孩子喜欢的朋友家长不喜欢怎么办? 孩子不喜欢上幼儿园家长怎么办 孩子不喜欢家长学佛怎么办呢? 学生家长讨厌老师老师该怎么办 孩子不爱去幼儿园总是哭怎么办 孩子学习一点都不主动怎么办 孩子怕老师不想上学怎么办