C语言位运算
来源:互联网 发布:最短路问题的floyd算法 编辑:程序博客网 时间:2024/06/05 11:38
// & 位且
//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;//~取反运算符是单目运算符不可以进行符合赋值运算
}
- C语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- C语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- scanf的补充了解
- 堆排序(用了好多的位运算)
- 美术专业必修课
- window下python安装Dlib库
- 【NOI OJ】 2.5 搜索 1253:Dungeon Master(地牢逃脱)
- C语言位运算
- Mac编译OpenJDK7
- 对Fragment 界面进行动态控制
- Hadoop技术内幕之Hadoop基本结构
- JAVASE总结--StringBuffer StringBuilder
- javaWeb用户权限控制简单实现
- RadioGroup和RadioButton
- 抽象类基本语法
- Object类实现的方法