学习自狄泰软件学院唐佐临老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。
实验1
实验2 :交换两个整形变量的值方法一 :定义中间变量,麻蛋 低级
实验3 :交换两个整形变量的值方法二 :部分和 ,但是不能满足两个非常大的int型数据相加结果溢出int类型范围的情况
实验4 :交换两个整形变量的值方法三 :位运算 按位异或,最简洁 最高效
实验5:按位或按位与 VS 逻辑或逻辑与
实验1
结论:
1 四则运算的优先级高于位运算
2 在位运算中,右操作数的范围必须是:[0,31],向上面最后一个打印,3 << -1 的值,完全由编译器生产厂商来决定 一个整移位-1 倒是是什么,这里gcc编译器比较有意思,gcc编译器的生产厂商认为 左移-1 就是 右移 1,但是其他的编译器又有其他自己的规定,所以一定要注意 在位运算中,右操作数的范围必须是:[0,31]!!!!
实验2 :交换两个整形变量的值方法一 :定义中间变量,麻蛋 低级
#include <stdio.h>
#define SWAP1(a, b) \
{ \
int t = a; \
a = b; \
b = t; \
}
int main()
{
int a = 1;
int b = 2;
printf("a = %d\n", a);
printf("b = %d\n", b);
SWAP1(a ,b);
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
实验2 :交换两个整形变量的值方法二 :部分和 ,但是不能满足两个非常大的int型数据相加结果溢出int类型范围的情况
#include <stdio.h>
#define SWAP2(a, b) \
{ \
a = a + b; \
b = a - b; \
a = a - b; \
}
int main()
{
int a = 1;
int b = 2;
printf("a = %d\n", a);
printf("b = %d\n", b);
SWAP2(a ,b);
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
实验3 :交换两个整形变量的值方法三 :位运算 按位异或,最简洁 最高效
#include <stdio.h>
#define SWAP3(a, b) \
{ \
a = a ^ b; \
b = a ^ b; \
a = a ^ b; \
}
int main()
{
int a = 1;
int b = 2;
printf("a = %d\n", a);
printf("b = %d\n", b);
SWAP3(a ,b);
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
实验4:按位或按位与 VS 逻辑或逻辑与
按位或按位与
逻辑或逻辑与