word后的网站引用怎么做,推广公司属于什么公司,网站的关键词搜索怎么做,台州建设信息港网站#x1f339;个人主页#x1f339;#xff1a;喜欢草莓熊的bear #x1f339;专栏#x1f339;#xff1a;C语言基础 目录
前言
一、数据类型的介绍
1.1 字符型
1.2 整形
1.3 浮点型
1.4 布尔类型
1.5 各种数据类型的长度
1.5.1 sizeof操作符
1.5.2 数据类型长度… 个人主页喜欢草莓熊的bear 专栏C语言基础 目录
前言
一、数据类型的介绍
1.1 字符型
1.2 整形
1.3 浮点型
1.4 布尔类型
1.5 各种数据类型的长度
1.5.1 sizeof操作符
1.5.2 数据类型长度
1.5.3 sizeof中表达式不计算
1.6 signed和unsigned
1.7 数据类型的取值范围
二、变量
2.1变量的创建
2.2变量的分类
三、算术操作符
3.1“/” 整除、
3.2“%” 取余
四、赋值操作符
6.1连续赋值
6.2符合赋值
五、单目操作符
5.1 和 --
5.1.1 前置
5.1.2 后置
5.2 和 -
总结 前言 大家好哦bear又给大家跟新内容了。本节内容主要包含介绍各种数据类型、变量、各种操作符。大家跟上bear的脚步秩序前进冲鸭 一、数据类型的介绍 C语⾔提供了丰富的 数据类型 来描述⽣活中的各种数据。 使⽤ 整型类型 来描述整数使⽤ 字符类型 来描述字符使⽤ 浮点型类型 来描述⼩数。 所谓“ 类型 ”就是相似的数据所拥有的共同特征编译器只有知道了数据的类型才知道怎么操作 数据。 下⾯盘点⼀下C语⾔提供的各种数据类型本章节主要探讨内置数据类型。 1.1 字符型 用来储存数据的一种类型分为有符号和无符号。char 默认是有符号的 char //character
[signed] char //有符号的
unsigned char //⽆符号的
1.2 整形 在括号内的int 可以省略不写。 //短整型
short [int]
[signed] short [int]
unsigned short [int]//整型
int
[signed] int
unsigned int//⻓整型
long [int]
[signed] long [int]
unsigned long [int]//更⻓的整型
//C99中引⼊
long long [int]
[signed] long long [int]
unsigned long long [int]
1.3 浮点型
float//单精度double//双精度long double//多精度
1.4 布尔类型 C 语⾔原来并没有为布尔值单独设置⼀个类型⽽是使⽤整数 0 表⽰假⾮零值表⽰真。 在 C99 中也引⼊了 布尔类型 是专⻔表⽰真假的 。 _Bool
1.5 各种数据类型的长度 每⼀种数据类型都有⾃⼰的⻓度使⽤不同的数据类型能够创建出⻓度不同的变量变量⻓度的不 同存储的数据范围就有所差异。那我们是怎么得到长度呢那就与我们介绍的sizeof操作符息息相关了。 1.5.1 sizeof操作符 sizeof 是⼀个关键字也是操作符专⻔是⽤来计算sizeof的操作符数的类型⻓度的单位是字节。 sizeof 操作符的操作数可以是类型也可是变量或者表达式。 sizeof 的操作数如果不是类型是表达式的时候可以省略掉后边的括号的。 sizeof 后边的表达式是不真实参与运算的根据表达式的类型来得出⼤⼩。 sizeof 的计算结果是 size_t 类型的。 sizeof (类型)
sizeof 表达式 sizeof 运算符的返回值C 语⾔只规定是⽆符号整数并没有规定具体的类型⽽是留给 系统⾃⼰去决定 sizeof 到底返回什么类型。不同的系统中返回值的类型有可能是 unsigned int 也有可能是 unsigned long 甚⾄是 unsigned long long 对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。 C 语⾔提供了⼀个解决⽅法创造了⼀个类型别名 size_t ⽤来统⼀表⽰ sizeof 的返 回值类型。对应当前系统的 sizeof 的返回值类型可能是 unsigned int 也可能是 unsigned long long 。 比如因为sizeof 返回值是size_t的类型所以要用%zd来打印
#include stdio.h
int main()
{int a 10;printf(%zd\n, sizeof(a));printf(%zd\n, sizeof a);//a是变量的名字可以省略掉sizeof后边的()printf(%zd\n, sizeof(int));printf(%zd\n, sizeof(3 3.5));return 0;
}
1.5.2 数据类型长度
#include stdio.h
int main()
{printf(%zd\n, sizeof(char));printf(%zd\n, sizeof(_Bool));printf(%zd\n, sizeof(short));printf(%zd\n, sizeof(int));printf(%zd\n, sizeof(long));printf(%zd\n, sizeof(long long));printf(%zd\n, sizeof(float));printf(%zd\n, sizeof(double));printf(%zd\n, sizeof(long double));return 0;
} 在VS2022 X64的配置环境的输出 也就是说char 和 _Bool类型是一个字节short 是两个字节int、long、float是4个字节long long 、double 、 long double 是8个字节。
1.5.3 sizeof中表达式不计算
//测试sizeof中表达式不计算#include stdio.h
int main()
{short s 2;int b 10;printf(%d\n, sizeof(s b1));printf(s %d\n, s);return 0;
} sizeof 在代码进⾏编译的时候就根据表达式的类型确定了类型的常⽤⽽表达式的执⾏却要在程序运⾏期间才能执⾏在编译期间已经将sizeof处理掉了所以在运⾏期间就不会执⾏表达式了。 1.6 signed和unsigned C 语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字表⽰⼀个类型带有正负号包含负值 unsigned 关键字表⽰该类型不带有正负号只能表⽰零和正整数。 对于 int 类型默认是带有正负号的也就是说 int 等同于 signed int 。 由于这是默认情况关键字 signed ⼀般都省略不写但是写了也不算错。 整数变量声明为 unsigned 的好处是同样⻓度的内存能够表⽰的最⼤整数值增⼤了⼀倍。 ⽐如16位的 signed short int 的取值范围是-32768~32767最⼤是32767⽽ unsigned short int 的取值范围是0~65535最⼤值增⼤到了65,535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。 #define SHRT_MIN (-32768) //有符号16位整型的最⼩值#define SHRT_MAX 32767 //有符号16位整型的最⼤值#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值#define INT_MAX 2147483647 //有符号整型的最⼤值 注意C 语⾔规定 char 类型默认是否带有正负号由当前系统决定。 这就是说 char 不等同于 signed char 它有可能是 signed char 也有可能是 unsigned char 。 这⼀点与 int 不同 int 就是等同于 signed int 。 1.7 数据类型的取值范围 上述的数据类型很多尤其数整型类型就有short、int、long、long long 四种为什么呢 其实每⼀种数据类型有⾃⼰的取值范围也就是存储的数值的最⼤值和最⼩值的区间有了丰富的类 型我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值 limits.h ⽂件中说明了整型类型的取值范围。 float.h 这个头⽂件中说明浮点型类型的取值范围。 为了代码的可移植性需要知道某种整数类型的极限值时应该尽量使⽤这些常量。 • SCHAR_MIN SCHAR_MAX signed char 的最⼩值和最⼤值。 • SHRT_MIN SHRT_MAX short 的最⼩值和最⼤值。 • INT_MIN INT_MAX int 的最⼩值和最⼤值。 • LONG_MIN LONG_MAX long 的最⼩值和最⼤值。 • LLONG_MIN LLONG_MAX long long 的最⼩值和最⼤值。 • UCHAR_MAX unsigned char 的最⼤值。 • USHRT_MAX unsigned short 的最⼤值。 • UINT_MAX unsigned int 的最⼤值。 • ULONG_MAX unsigned long 的最⼤值。 • ULLONG_MAX unsigned long long 的最⼤值。 二、变量
2.1变量的创建 了解清楚了类型我们使⽤类型做什么呢类型是⽤来创建变量的。 什么是变量呢C语⾔中把 经常变化 的值称为 变量 不变 的值称为 常量 。 语法创建形式如下
data_type name;| || |
数据类型 变量名 举例: 变量在创建的时候就给⼀个初始值就叫初始化。 int age 18;
char ch w;
double weight 48.0;
unsigned int height 1000;
2.2变量的分类 • 全局变量在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴整个⼯程中想使⽤都是有办法使⽤的。 • 局部变量在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限只能在⾃⼰所在的局部范围内使⽤的。 那就有人会好奇如果局部和全局变量名字相同呢我们直接上代码展示
#include stdio.h
int n 1000;
int main()
{int n 10;printf(%d\n n);//打印的结果是多少呢return 0;
} 其实当局部变量和全局变量同名的时候局部变量优先使⽤。 全局变量和局部变量在内存中存储在哪⾥呢 ⼀般我们在学习C/C语⾔的时候我们会关注 内存中的三个区域栈区、堆区、静态区。 1. 局部变量是放在内存的栈区 2. 全局变量是放在内存的静态区 3. 堆区是⽤来动态内存管理的后期会介绍 其实内存区域的划分会更加细致以后在操作系 统的相关知识的时候会介绍。 三、算术操作符 在写代码时候⼀定会涉及到计算。 C语⾔中为了⽅便运算提供了⼀系列操作符其中有⼀组操作符叫算术操作符。分别是 - * / % 这些操作符都是双⽬操作符。 注 操作符也被叫做运算符是不同的翻译意思是⼀样的。 前面提到的、-、*都是和我们学习的数学一样的运用方式就不多介绍了。大家可以直接琢磨一下。
3.1“/” 整除、 运算符 / ⽤来完成除法。 除号的两端如果是整数执⾏的是整数除法得到的结果也是整数。 #include stdio.h
int main()
{float x 6 / 4;int y 6 / 4;printf(%f\n, x); // 输出 1.000000printf(%d\n, y); // 输出 1return 0;
} 上⾯⽰例中尽管变量 x 的类型是 float 浮点数但是 6 / 4 得到的结果是 1.0 ⽽不是 1.5 。原因就在于 C 语⾔⾥⾯的 整数除法是整除只会返回整数部分丢弃⼩数部分 。 如果希望得到浮点数的结果两个运算数必须⾄少有⼀个浮点数这时 C 语⾔就会进⾏浮点数除法。 #include stdio.h
int main()
{float x 6.0 / 4; // 或者写成 6 / 4.0printf(%f\n, x); // 输出 1.500000return 0;
} 上⾯⽰例中 6.0 / 4 表⽰进⾏浮点数除法得到的结果就是 1.5 。 3.2“%” 取余 运算符 % 表⽰求模运算即返回两个整数相除的余值。这个运算符只能⽤于整数不能⽤于浮点数。 #include stdio.h
int main()
{printf(%d\n, 11 % -5); // 1printf(%d\n,-11 % -5); // -1printf(%d\n,-11 % 5); // -1return 0;
} 根据上面的代码得到结果可知负数求模的规则是结果的正负号由第⼀个运算数的正负号决定。 上⾯⽰例中第⼀个运算数的正负号 11 或 -11 决定了结果的正负号。 四、赋值操作符 在变量创建的时候给⼀个初始值叫初始化在变量创建好后再给⼀个值这叫赋值。 赋值操作符 是⼀个随时可以给变量赋值的操作符。 给上一个例子 int a 100;//初始化
a 200;//赋值这⾥使⽤的就是赋值操作符 6.1连续赋值 赋值操作符也可以连续赋值如 int a 3;
int b 5;
int c 0;
c b a3;//连续赋值从右向左依次赋值的。 C语⾔虽然⽀持这种连续赋值但是写出的代码不容易理解建议还是拆开来写这样⽅便观察代码的 执⾏细节。 int a 3;
int b 5;
int c 0;
b a3;
c b; 这样写在调试的是每⼀次赋值的细节都是可以很⽅便的观察的。所以还是这样写比较好 6.2符合赋值 在写代码时我们经常可能对⼀个数进⾏⾃增、⾃减的操作如下代码 int a 10;
a a3;
a a-2; C语⾔中提供了复合赋值符⽅便我们编写代码这些赋值符有 -
* / %//下⾯的操作符后期讲解| ^ 五、单目操作符 前⾯介绍的操作符都是双⽬操作符有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数被称为单⽬操作符。 、 -- 、 ( 正 ) 、 -( 负 ) 就是单⽬操作符的。 5.1 和 -- 是⼀种⾃增的操作符⼜分为前置和后置--是⼀种⾃减的操作符也分为前置--和后置--. 5.1.1 前置 int a 10;
int b a;//的操作数是a是放在a的前⾯的就是前置
printf(a%d b%d\n,a , b); 计算⼝诀先1后使⽤ a原来是10先1后a变成了11再使⽤就是赋值给bb得到的也是11所以计算技术后a和b都 是11相当于这样的代码 int a 10;
a a1;
b a;
printf(a%d b%d\n,a , b); 5.1.2 后置
int a 10;
int b a;//的操作数是a是放在a的后⾯的就是后置
printf(a%d b%d\n,a , b); 计算⼝诀先使⽤后1 a原来是10先使⽤就是先赋值给bb得到了10然后再1然后a变成了11所以直接结束后a是11b是10相当于这样的代码 int a 10;
int b a;
a a1;
printf(a%d b%d\n,a , b); 搞懂了前置和后置就可以类比学习其他的了。
5.2 和 - 这⾥的是正号-是负号都是单⽬操作符。 运算符 对正负值没有影响是⼀个完全可以省略的运算符但是写了也不会报错。 运算符 - ⽤来改变⼀个值的正负号负数的前⾯加上 - 就会得到正数正数的前⾯加上 - 会得到负 数。 int a 10;
int b -a;
int c -10;
printf(b%d c%d\n, b, c);//这⾥的b和c都是-10
int a -10;
int b -a;
printf(b%d\n, b); 总结 敲重点多注意前置和后置还有复合赋值会出现一些很奇怪的题目。下期预告强制类型转换和scanf 、printf的介绍与使用敬请期待吧