按位与、或、异或
1.按位与 &
0&0=0 0&1=0 1&0=0 1&1=1
2.按位或 |
0|0=0 0|1=1 1|0=1 1|1=1
3.按位异或 ^
0^0=0 0^1=1 1^0=1 1^1=0
(只要学过离散数学懂的都懂)
(都是双目运算符)
按不同进制进行输出语句
- %d\n 十进制输出
- %o\n 八进制输出
- %x\n 十六进制输出
代码
#include <stdio.h>
int main()
{int a=25;printf("%d的八进制数是:%o\n",a,a);printf("%d的十进制数是:%d\n",a,a);printf("%d的十六进制数是:%x\n",a,a);return 0;
}
25的八进制数是:31
25的十进制数是:25
25的十六进制数是:19
(c语言没有二进制的输出,可百度-手动构造函数实现十-二进制的转化)
十进制—二进制
(辗转相除法) 以25为例
25 / 2 ... 1
12 / 2 ... 0
6 / 2 ... 0
3 / 2 ... 1
1 / 2 ... 1(除到商为0为止)
从下到上,于是25(十进制)=11001(二进制)
calculator可证明这个结果↓
手动构造函数实现十-二进制的转化
(此处用int型来表示二进制数)
#include <stdio.h>
int main()
{int n=25; //需要转化的十进制数int num=n;int ys; //余数int Binary=0; //二进制数int temp=1; //中间变量while(num){ys=num%2;Binary+=ys*temp;temp*=10;num/=2;}printf("%d的二进制数为%d\n",n,Binary);
}
运行
25的二进制数为11001
按位与、或、异或代码
#include <stdio.h>
int f(int num)
{int ys; //余数 int Binary=0; //二进制数int temp=1; //中间变量while(num){ys=num%2;Binary+=ys*temp;temp*=10;num/=2;}return Binary;
}
int main()
{int a=13;int b=14;printf("%d的二进制数为:%d\n",a,f(13));printf("%d的二进制数为:%d\n",b,f(14));printf("\n%d&%d=%d(十进制)\n",a,b,a&b);printf("%d&%d=%d(二进制)\n",a,b,f(a&b));printf("\n%d|%d=%d(十进制)\n",a,b,a|b);printf("%d|%d=%d(二进制)\n",a,b,f(a|b));printf("\n%d^%d=%d(十进制)\n",a,b,a^b);printf("%d^%d=%d(二进制)",a,b,f(a^b));return 0;
}
运行
13的二进制数为:1101
14的二进制数为:111013&14=12(十进制)
13&14=1100(二进制)13|14=15(十进制)
13|14=1111(二进制)13^14=3(十进制)
13^14=11(二进制)
computer计算器可证明这个结果