进制转换
二进制0B
十六进制0x
例: 十进制15 0B1111 0XOF
二进制转十六进制
一位十六进制数等于4位二进制数,通过8421码来计算
结构体
结构体是把多个不同类型的数据集合在一个类型之中
数组:相同数据类型的集合
结构体:不同数据类型的集合
结构体的定义方式一:
struct name{
int a;
char b;
float c;
}x;
使用结构体的步骤:
//1、定义结构体
struct name{
int a;
char b;
float c;
}x;
//2、写入数据
x.a=65500;
x.b=255;
x.c=0x30;
//3、数据调用
if(x.a>1){
z=x.b;
}
结构体的定义方式二(typedef函数定义数据类型):
结构体成员变量赋值
结构体名.成员变量名 =赋值
struct student{
char name;
int number;
float score;
}x;
//赋值
student.name='张三';
student.number=5420;
student.score=60.0;
位运算
与其他运算符不同,C语言中位运算,顾名思义,是以数值的二进制位为单位进行操作的,包含<<(左移)、>>(右移)、~(按位取反)、&(按位与)、|(按位或)、^(按位异或) 共六种运算符
移位运算
<<和>>运算符,通过箭头方向可以很好的辨别,分别是C语言位运算符中的左移运算符和右移运算符,如表达式13<<2
它的运算过程为:13的用二进制(四个字节,不考虑符号)表示为,0000 0000 0000 0000 0000 0000 0000 1101
那么向左移两位,右侧补0
则变为0000 0000 0000 0000 0000 0000 0011 0100 换成十进制即变为52
同理,如表达式25>>3,表示25的二进制位向右移三位,由
0000 0000 0000 0000 0000 0000 0001 1001
变为0000 0000 0000 0000 0000 0000 0000 0011 即十进制3
程序验证:
#include<stdio.h>
int main()
{
int a,b;
a=13<<2;
b=25>>3;
printf("a=%d,b=%d\n",a,b);
return 0;
}
运算结果:
a=52,b=3
按位运算符
&按位或运算符
按位与运算符&,有点和前面学过的逻辑与(&&)运算符类似,只有一个&,都是同为1则为1。不同的是按位相互运算。如3&5,运算过程如下:
3 0000 0000 0000 0000 0000 0000 0000 0011
5 0000 0000 0000 0000 0000 0000 0000 0101
& ------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0001
可以看到3&5的结果即十进制1
|按位或运算符
|按位或运算符,同样,它也与我们前面学过的逻辑或运算符类似,只有一个竖线表示,作用位,两个对应的二进制位有一个为1结果即为1。如8|7的运算过程可以如下表示:
8 0000 0000 0000 0000 0000 0000 0000 1000
7 0000 0000 0000 0000 0000 0000 0000 0111
& ------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1111
可以看到最终的二进制结果换算成十进制即为15
^按位异或运算符
^表示按位异或运算符,顾名思义,相异,即不同则为1,反之为0
例如15和16进行异或运算,运算过程如下:
15 0000 0000 0000 0000 0000 0000 0000 1111
16 0000 0000 0000 0000 0000 0000 0001 0000
^ ------------------------------------------
0000 0000 0000 0000 0000 0000 0001 1111
可以看到,经过按位异或运算后,其结果变成十进制应为31
~取反运算符
~取反运算符,是对数值的二进制位进行取反,是第一个单目运算符,因为只有一个运算对象,运算过程是即0变为1,1变为0
~1=0
~0=1