一、整型(int:integer)
- 概念:表达整数类型的数据(正整数、负整数、0)
- 全称:integer
- 语法:
需要注意的地方(其它数据类型也如此):
(1).int 的本意是 integer,即整数的意思
(2).int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
(3).变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。
(4).变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
1、变量的定义和赋值:
2、从内存的角度来看待这个过程(int num = 100)
(1)、整型修饰符
(2)、符号位
(3)、数据在内存中的编码形式
- 正数:直接使用原码的二进制来表达,比如a=3,在内存中是 0000 0011
- 负数:用绝对值取反加一来表达(也就是补码),比如a=-3,在内存中是1111 1101
-3的原码: 1000 0011
-3的绝对值: 0000 0011
-3的反码: 1111 1100
3的补码: 1111 1101
// 注意:负数的补码在取反加1的时候,符号位是不变的
(比如:1111 1111+1 == 1 1000 0000 == -128 )
- 解析:

(4)、进制
源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是
二进制
二、浮点型(float、double)
- 概念:用来表达小数的数据类型
- 全称:floating point
- 语法:
- 单精度浮点型(float),典型尺寸是4字节
- 双精度浮点型(double),典型尺寸是8字节
- 长双精度浮点型(long double),典型尺寸是16字节
float f1 // 单精度 double f2 // 双精度 long double f3 // 长双精度
说明:占用内存越多,能表达的
精度越高
(1)、精度说明,在内存中的存放:
- 公式:

- 例子:

- 说明:
·s表示符号位,当例子S=0,值为正数;当S=1,值为负数。
·M表示有效数字,大于等于1,小于2。
·E表示指数位。
如此5.5都二进制存储就是:S符号位1位上图红色0+E指数位绿色部分八位00000010+M有效数字紫色部分23位00000000000000000001011


三、字符型(char, character) --- 一个字节的int型
- 概念:用来描述字符的数据类型
- 全称:character
- 语法:
char ch1 = 'a'; // 'a'是字符常量,代表字母a char ch2 = '\n'; // '\n'不可见的字符常量,代表回车
- 内存中字符的表现形式:

(1)、ASCLL表(以ascll码表数值的方式,存储到内存中):

四、字符串(character string)
- 概念:表达字符串类型的数据
- 全称:character string
(1)、在内存中的存储:

(2)、格式控制符:
%s // 字符串类型 %-10s: // 左对齐并占用宽度为 10 的字符串; %10s: // 右对齐并占用宽度为 10 的字符串;
- 解析:

- 示例代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
// 1、定义字符串
char ch1 = 'a'; // 单引号''表示字符
char buf1[16] = "nihao"; // 双引号""表示字符串(推荐初学者表示字符串时,使用buf数组来表示)
char *p1 = "shijie"; // 指针指向字符串常量区
printf("buf1 = %s\n", buf1); // 为什么可以刚刚好将字符串打印完全呢??(因为每一个字符串的末尾都有一个结束标记符'\0',函数printf遇到这个结束标记符,就会停止打印)
printf("p1 = %s\n", p1);
// 2、字符串的显示位置控制
printf("buf1(字符串左对齐) == %-10sfanggong\n", buf1);
printf("p(字符串右对齐) == %10s\n", p1);
// 笔试题1:
char buf2[5] = "nihao"; // 不是字符串(不建议这么写,因为nihao字符已经占了5个字节了,没有'\0'存放的空间)
char buf3[6] = "nihao"; // 是字符串
// 笔试题2:strlen和sizeof的区别
// a、sizeof是一个运算符,能够计算出变量的字节大小,对于字符串来说,sizeof会把字符串最后的那个'\0'字符也计算进去
printf("sizeof(buf3) == %lu\n", sizeof(buf3));
// b、strlen是一个函数,是C语言标准字符串库里面提供的一个计算字符串长度的函数,遇到'\0'就会结束
printf("strlen(buf3) == %lu\n", strlen(buf3));
// 笔试题3:内存题
buf1[0] = 'a'; // 可以赋值(因为赋值的地方是数组,数组的内存处在栈区(可读可写的区域))
// *(p1+0) = 'a'; // 不可以赋值(因为赋值的地方是内存的常量区(可读不可写))
return 0;
}
五、布尔型数据(bool)
- 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
- 注意:
示例代码:
#include <stdio.h>
#include <stdbool.h> // 会有定义的真值(true)和假值(false)
// 官方定义的(stdbool.h)
/*
#define true 1
#define false 0
*/
// 自己定义的
#define TRUE 1
#define FALSE 0
int main(int argc, char const *argv[])
{
// 一般定义
bool flag = 100; // 非0为真,0为假
// 判断方法1:
if (flag == TRUE)
{
printf("11111111111\n");
}
else
{
printf("222222222\n");
}
// 判断方法2:(笔试题)
if (flag) // 真
{
printf("3333333333333\n");
}
if(!flag) // 逻辑非,假
{
printf("4444444444444\n");
}
return 0;
}
六、常量和变量
- 概念:不可改变的内存称为常量(该内存可读不可写),可以改变的内存称为变量(该内存可读可写)
- 变量的类型:int型、char型、float型、double型、字符串型、布尔型等(还有他们无符号、短、长拓展型)
- 常量的类型:
