1.将data中的第[7:4]位置1,保持其他位不变 【7:4】表示4-7位 说明:最右边位为第0位,用十六进制表示。
#include <stido.h>
int main()
{
unsigned char data = 0x1;
data = data | 0xF0;
printf("%#x\n",data); //结果为0xF1
return 0;
}
2.给定一个整形变量a
1)设置a的bit位3为1
#include <stdio.h>
int main()
{
unsigned int date=0x1;
date = date & 0x08;
printf("%#x\n",date); //输出结果0x09
return 0;
}
2)将a的bit3置0
#include <stdio.h>
int main()
{
unsigned int date=0x88;
date = date & 0xF7;
printf("%#x\n",date); //输出结果0x80
return 0;
}
3.执行语句k=11>>1后,变量k的当前值
#include <stdio.h>
int main()
{
int k=11; //二进制为0000 1011
k = k >> 1; //右移一位,高位补0
printf("%d\n",k); //输出为5 即0000 0101
return 0;
}
4.输入三个数,按照从大到小的顺序输出
#include <stdio.h>
//利用条件运算符实现
int main(int argc, const char *argv[])
{
int a,b,c,max,mid,min;
printf("输入三个整数:");
scanf("%d %d %d",&a,&b,&c);
max=a>b?(a>c?a:c):(b>c?b:c);
min=a<b?(a<c?a:c):(b<c?b:c);
mid=(a<max && a>min)?a:((b>max && b<min)?b:c);
printf("从大到小输出三个整数:%d %d %d\n",max,mid,min);
return 0;
}
5.思考如何交换两个数的值
#include <stdio.h>
//添加中间变量实现交换
int main()
{
int a,b,t;
printf("请输入:a=");
scanf("%d",&a);
printf("请输入:b=");
scanf("%d",&b);
t=a;
a=b;
b=t;
printf("交换后a=%d\n",a);
printf("交换后b=%d\n",b);
return 0;
}
6.scanf吸收垃圾字符的代码重新写一遍,练习题4重新做一遍
//第一种:利用scanf严格控制格式的特点,只能用于同一条语句连续输入
//在每个可能出现垃圾字符的位置填一个空格
scanf("%c %c %c %c",&a,&b,&c,&d);
//第二种:利用抑制字符%*c吸收垃圾字符
//%*c作为抑制字符一定要吸收一个字符
scanf("%c%*c%c%*c%c%*c%c%*c",&a,&b,&c,&d);
//第三种:在%c前面加空格,作用是吸收前面所有垃圾字符
int num;
char c;
scanf("%d",&num);
scanf(" %c",&c); //吸收前面的所有垃圾字符
printf("%d\t%c\n",num,c);
//第四种:使用getchar吸收垃圾字符
int num;
char c,d,b;
scanf("%d",&num);
getchar(); //吸收单个字符,每个数据之间只能有一个垃圾字符,多个垃圾字符getchar不能吸收
scanf("%c",&b);
getchar();
scanf("%c",&c);
getchar();
scanf("%c",&d);
//练习4
unsigned char data=0x1;
//将data 第6位置1的表达式 即0x1<<6
data = data | 0100 0000;
//请写出将 data第6位清0的表达式:
data = data & 1011 1111;
或data = data & ~(0x1<<6)
//请写出将 data第6位取反的表达式:
data = data ^ 0100 0000;
7.整理思维导图
8.预习if···else分支语句
//第一种
if(表达式)
语句1;
//第二种
if(表达式)
语句1;
else
语句2;
//第三种
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;