1.存储的换算
1Byte=8bit 一个字节BYTE=8位bit
1KB=1024Byte=210Byte
1MB = 1024KB = 220Byte
1GB = 1024MB = 230Byte
1TB = 1024GB = 240Byte
1PB = 1024TB = 250Byte
1EB = 1024PB = 260Byte
数值是以补码表示的
正数的补码与原码相同
负数的补码:将该数的绝对值的二进制形式按位取反在加1
例
10的原码:00001010
取反:11110101
再加1,得-10的补码:11110110
说 明 字符型 短整型 整型 长整型 单精度浮点型 双精度浮点型
数据类型 char short int long float double
指针固定占4个字节
获取某个数据类型的长度可以使用 sizeof 操作符
2.数组
同一个数组数据类型相同;下标从零开始A[0]/A[1]…
如果要数千亿有10个变量的数组必须用循环语句逐个输出各下标变量
for(i=0;i<10;i++)
{
printf("%d",a[i];
}
二维数组
a[3][4];
a[0]--------a00 a01 a02 a03
a[1]--------a10 a11 a12 a13
a[2]--------a20 a21 a22 a23
int a[3][4]={
{1,2,3,4},{5,6,7,8},{9,10,11,12}};
3.结构体
基本形式
struct 结构体名
{
结构体所包含的变量或数组
};
例
struct stu{
char *name;//姓名
int num;//学号
int age;//年龄
char group;//所在学习小组
float score;//成绩
};
结构体变量
struct stu stu1,stu2;
定义了两个变量stu1,stu2都是stu类型,都由5个成员组成
也可以
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
} stu1, stu2;
首先在C中定义一个结构体类型要用
typedef struct Student
{
int a;
}Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明。
这里的Stu实际上就是struct Student的别名。
赋值方法
//给结构体成员赋值
stu1.name = “Tom”;
stu1.num = 12;
stu1.age = 18;
stu1.group = ‘A’;
stu1.score = 136.5;
//读取结构体成员的值
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
return 0;
}
另外的方法
//结构体指针
struct stu *pstu = &stu1;
注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:
struct stu *pstu = &stu1;
*pointer = &stu1;
获取结构体成员
pointer->memberName
指针->所取成员
(*pointer).memberName
*指针.取成员
4.共用体
union 共用体名
{
成员列表
};
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
#include <stdio.h>
union data{
int n;
char ch;
short m;
};
int main(){
union data a;
printf("%d, %d\n", sizeof(a), sizeof(union data) );
a.n = 0x40;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.ch = ‘9’;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.m = 0x2059;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.n = 0x3E25AD54;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
return 0;
}
%x是十六进制输出 %c是按字符型输出 %hx是以16进制的 输出short类型的整数
运行结果
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54
你会发现改变一个数的值其他数的值也跟着改变了全部变为40、‘9’、2059等
5.关系运算符
关系运算符 含 义
< 小于 <= 小于等于 > 大于 >= 大于等于
== 等于 != 不等于
1)与运算(&&)
参与运算的两个表达式都为真时,结果才为真,