4 位运算应用
& | 测试某个二进制位的某位是1还是0 |
| | 测试某位是1还是0 |
^ | 交换两个数 |
~ |
|
<< | 左移n位相当于乘2^n |
>> | 右移b位相当于除2^n |
注意:左移或者右移不能超其二进制数的总位数 ,左移补0,右移补符号位。
#include<stdio.h>
int main()
{
int n = 0 , m = 0;
printf("请输入一个整数:\n");
scanf("%d",&n);
printf("&测试第5位是1还是0:");
printf("%d\n",(n&16)>>4);
printf("|测试第5位是1还是0:");
printf("%d\n",((n|1)<<27)>0?0:1);
printf("请再输入一个整数:\n");
scanf("%d",&m);
printf("^交换两个整数的值:\n");
printf("原值n = %d,m = %d\n",n,m);
m = m^n , n = m^n, m =m^n;
printf("交换后的值n = %d,m = %d\n",n,m);
return 0;
}
右移的应用:取得某个字节的数据
m=0x3862517b
(char)m //得到最右面一个字节7b
取得倒数三个字节的数据:先右移16位,然后取最后一个字节
(char)(m>>16)
左移的应用:把多个数据凑成一个整数
int a=0x12,b=0x34,c=0x56,d=0x78
a<<24,b<<16,c<<8,d //可以用加法合并
(a<<24)|(b<<16)|(c<<8)|d //用按位或合并
5 控制结构
5.1 switch()
括号里面可以使整型,字符,不能是浮点小数,别忘每项最后的break
5.2 continue和break
continue结束本次循环,跳过循环体中剩余内容 ,只能用于循环体中
break 终止循环
5.3 for中定义变量
for(int I = 0; ; )若想如此定义,编译时需加 -std = c99(c98不要支持)
6枚举
枚举变量 枚举常量,是字面量,默认从0开始,可以指定:
enumbool{true=1,false,a=2,s} //false值为2,s值为3
注意定义变量时enum e_name作为一个整体,不同与C++可以只使用类型名,所以
在C语言中,使用typedef重命名.
enum gender{male,famale};
enum gender s=male;
typedef enum{true, false} bool;