学习目标:
C语言学习第二天Xmind笔记和作业
学习内容:
作业:
1.将data中的第[7:4]位置1,保持其他位不变。[7:4]表示4-7bit位
答:
#include <stdio.h>
int main(int argc, const char *argv[])
{
unsigned char data;
data=data | (0x0F<<4);
printf("%#x\n",data);
return 0;
}
运行结果:
0x1linux@linux:~/zuoye230711/day2$ gcc z3.c -o z3.out
linux@linux:~/zuoye230711/day2$ ./z3.out
0xf0
2.思考如何交换两个数
答:使用异或法交换两个数。
int a = 3;
int b = 5;
a = a ^ b;
b = b ^ a;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
虚拟机终端运行结果:
linux@linux:~/zuoye230711/day2$ gcc z1.c -o z1.out
linux@linux:~/zuoye230711/day2$ ./z1.out
a=5 b=3
3.把课上位运算的第2题,再整理一遍
题目:有unsigned char a; 1111 1111 ---->bit默认从0开始
给a的第6个bit置1—>或 a | 0100 0000 a|(0x1<<6)
给a的第4个bit置0—>于 a & 1110 1111 ~(0001 0000) = 1110 1111 a&~(0x1<<4)
给a的第5个bit取反—>异或 (同0异1) a ^ 0010 0000 a^(0x1<<5)
答:
#include <stdio.h>
int main(int argc, const char *argv[])
{
unsigned char a;
a = a | (0x1<<6);
printf("给a的第6个bit位置1后a=%#x\n",a);
a = a & ~(0x1<<4);
printf("给a的第4个bit位置0后a=%#x\n",a);
a=0;
a = a ^ (0x1<<5);
printf("给a的第5个bit位置取反后a=%#x\n",a);
return 0;
}
运行结果:
linux@linux:~/zuoye230711/day2$ gcc z2.c -o z2.out
linux@linux:~/zuoye230711/day2$ ./z2.out
给a的第6个bit位置1后a=0x40
给a的第4个bit位置0后a=0x40
给a的第5个bit位置取反后a=0x20