1.写一个函数返回参数二进制中 1 的个数
分析:int型32个bit,将一个数化为二进制,将其向右移位然后和1做按位与,若结果等于1,则它就是1。然后统计个数。
define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"
#include"stdlib.h"
Return1(int n){
int i = 0;
int count = 0;
for (i = 0; i < 32; i++){
if (((n>> i)&1) == 1){
count++;
}
}
return count;
}
int main(){
int n = 0, count = 0;
printf("please input the number:\n");
scanf("%d", &n);
printf("%d", Return1(n));
system("puase");
}
2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。
void show_num(int n){
int i = 0;
int count = 0;
for (i = 31; i >= 1; i -= 2){
printf("%d", ((n >> i) & 1) == 1);
} //最高的偶数位向右移动31位到最后一位,最低的向右移动一位
printf("\n");
for (i = 30; i >= 0; i -= 2){
printf("%d", ((n >> i) & 1) == 1); //最高的奇数位向右移动30位到最后一位,最低的向右移动0位
}
}
int main(){
printf("获取输出的偶数序列和奇数序列\n");
int n = 11;
show_num(n);
system("pause");
}
3.输出一个整数的每一位。
分析:各位模十便能得到结果,因为不知道又多少位数,因此可以采用递归调用求其他位数上的数
void Show_num(int n){ //递归调用
if (n != 0){
if (n < 0){
n = -n;
}
printf("%d\n", n % 10);
Show_num(n / 10);
}
}
int main(){
int n;
printf("please input a number:\n");
scanf("%d", &n);
Show_num(n);
system("pause");
}
4.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
分析:首先我们知道一个数和另一个数异或,相同为0,不同为1.因此我们可以先对两数进行异或,然后在进行前面求二进制1的操作,便能得到想要的结果。
int Different(int m,int n){
int i, count = 0;
m ^= n;
for (i = 0; i < 32; i++){
if ((m>>i)&1 == 1){
count++;
}
}
return count;
}
int main(){
int m, n;
printf("please input two numbers:\n");
scanf("%d %d", &m, &n);
printf("%d",Different(m, n));
system("pause");
}
总结:在C语言中,有算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式。
1、算术操作符有+、-、*、/、%,需要注意的是进行%操作时,两个操作数必须为整数,返回的是余数。
2、移位操作符:操作的对象是二进制,进行左移操作就相当与乘以2,左边抛弃,右边补0;进行右移操作时它又分为两种:(1)逻辑移位,左边用0填充,右边丢弃,(2)算数移位,左边用原该值的符号位填充,0代表正,1代表负,右边丢弃。
3、位操作符:&(按位与),有两个操作数,两者都为1则为1,否则为0;
|(按位或), 有两个操作数,两者都为0则为0,否则为1;
^(按位异或),有两个操作数,相同为0,不同为1;
4、赋值运算符:“=”即为赋值运算符,还有一些有复合效果的赋值运算符:+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
5.单目运算符:即只有一个操作数进行操作的运算符。有:! - + & sizeof ~ -- ++ *
6.关系运算符:顾名思义判断两数的关系,有:> >= < <= != ==一般使用!= ==
7.逻辑操作符:逻辑与和逻辑或,最终只有两种结果,要么真要么假(即要么0要么1),逻辑取反,真变假。
8.条件操作符exp?exp2:exp3若exp成立则返回exp2的值,否则返回exp3的值。
9.逗号表达式:只执行最后一个逗号后的表达式。
10、"."操作符,访问结构成员
共勉