c_数据类型 有符号和无符号有符号的第一位是用来表示正负号的int占4个字节代表有32位数据第一位就是存正负号的无符号就没有存正负号32位都是存数据的无符号用得很少无符号数的时候时需要注意使用无符号数和有符号数比较的时候可能会出现代码的实际和我们的预期不一致建议一般使用有符号数。除非迫不得已不然不要使用无符号数如果确实要使用无符号数不要和有符号数混用数据的表示范围short-》3w~-3wint-》21亿~-21亿在写long类型的数据的时候一定要Lsizeof函数sizeof的返回值是一个size_t这个是一个和系统位数相关的无符号的整数这个其实叫做类型别名就是另外取的一个名字小名一般用来一些非负的长度大小。在64位系统下这个size_t就是8字节在32位系统下这个size_t就是4字节一般看到别人是_t代表是什么什么的小名#include stdio.h void test() { /* 无符号数的时候时需要注意 使用无符号数和有符号数比较的时候可能会出现代码的实际和我们的预期不一致 建议一般使用有符号数。除非迫不得已不然不要使用无符号数 如果确实要使用无符号数不要和有符号数混用 */ //无符号和有符号混用首先将有符号数转换为无符号数。 int num1 -100; unsigned int num_2 120; if (num1 num_2) { printf(num1 num2.n); } else { printf(num1 num2.n); } } int main(void) { //sizeof用来计算占用的空间大小 //sizoef里面可以加类型变量名加表达式 //x86和X64只影响应用程序的位数只影响指针 printf(int%d\n, sizeof(int)); //4 printf(int%d\n, sizeof(int *)); //8 printf(int%d\n, sizeof(double)); //8 printf(int%d\n, sizeof(float)); //4 return 0; }基本数据类型C语言整数类型的取值范围可能根据机器的不同而不同但是有两条所有编译器都必须遵循的原则首先C标准规定了整数类型的最小字节长度short(2、int(2、long(4、longlong8)其次C标准规定了各个整数类型的字节长度满足下面的关系 shortintlonglonglong注意事项不要直接认为int一定是4个字节。在有一些环境中可能只有2个字节在c语言中只有整形和浮点型。字符点都是通过整形存也就是ASCLL码存。#include stdio.h int main() { // 1. 整型 char ch A; short s 100; int i 12345; long l 666666L; long long ll 9999999999L; // 2. 无符号整型 unsigned int ui 5000; // 3. 浮点型 float f 3.14f; //不加f的小数就是double double d 3.1415926; // 打印输出 printf(char %c\n, ch); printf(short %hd\n, s); printf(int %d\n, i); printf(long %ld\n, l); printf(long long %lld\n, ll); printf(unsigned int %u\n, ui); printf(float %f\n, f); printf(double %lf\n, d); return 0; } /* print 类型 格式符 char字符 % c short % hd int % d long % ld long long % lld unsigned int % u float % f double % f scanf 类型 格式符 char字符 % c short % hd int % d long % ld long long % lld unsigned int % u float % f double % lf */整形整形主要分两类有符号和无符号前面是否有一位表示符号位。有符号就是有一位表示正负无符号就是全部表示数据。平常无脑使用有符号。数据的表示范围short-》3w~-3wint-》21亿~-21亿在写long类型的数据的时候一定要L浮点数后期需要存储绝对精确的数一定不要使用float和double就行。浮点数是怎么存的IEEE754晓得就行主要是用科学计数法存十进制下的科学计数法1.2*10^3c语言的科学技术法是二进制知道浮点数的不精确是绝对的就可以了它是使用的科学计数法所以存储的范围比较大float的范围要比longlong大的多。float占4个字节double占8个字节扩展如果不想有精度损失问题这时候可以使用字符串来存储这些数据或者使用定点数方式存。浮点数类型能够执行的操作大体上和整数类型是一样的只不过少了一个位运算。void test_3() { float d 0.100000000001F; printf(%f, d); //0.100000精度就缺失了 /* */ } /* 为什么说float比long long能存储的数更多 ## 1. 先看两者存储空间 - long long8 字节64 位全部用来存整数 - float4 字节32 位分成三部分 1. 符号位1bit 2. 指数位8bit 3. 尾数位23bit --- ## 2. 最大值对比 ### 1long long纯整数 最大值 263−1≈9×10的18次方 超过这个数字就溢出。 ### 2float浮点科学计数法 8 位指数可以表示非常大的量级。 float 能表示的最大值大约 ≈3.4×10的18次方 */常量常量就是一个数他不能发生改变字符类型所谓字符指的是像字母汉字、标点等类似的符号。那么字符型就是用来存储表示单个字符的数据类型。很明显计算机只能存储二进制数据不可能也没能力直接存储一个符号字符比如计算机中存储字符实际是通过存储一个整数值来映射对应的字符。所以编程语言中的字符类型普遍都可以作为一个整数类型对待。比如现在我规定一个整数值97对应字符”a”那么计算机中存储整数97在字符类型中就表示存储字符”a”。于是我们就有了以下概念和结论1、一个用来映射对应字符的整数值称之为该字符的”编码值”。2、如果用一张表格来存储所有字符和编码值的映射关系这就是编码表。所以我们了解一门编程语言的字符类型最重要的就是弄清楚它所基于的编码表。这个过程就叫做编码存储这些字符的时候只需要将这个字符对应的编码值存储到磁盘里面。解码从磁盘中取出来的时候自动变成字符这种对应关系叫做编码表一般都是有国家的标准委员会指定的。ASCII美国标准局制定的。只能存储数字、字母、符号。GBK:中国标准委员会制定的。能存储中文、数字、字母。一般都是兼容ASCII2个字节存数据UTF-8:可以存储英文、中文、日文、韩文。采用可变长的编码技术1-4个字节。中文长就用3个字节存英语短就用1个字节存兼容GBK和ASCLL和其它的如何存内存中张对应的GBK是998然后把998拆开9在GBK是6668在GBK是665.就按照666 666 665整个这样存进去void test_4() { char a a; printf(%d, a); //97 printf(%c, a); //a }读写字符putchar就是将一个字符显示在屏幕上。void test_5() { char ch a; putchar(ch); putchar(\n); }getchar(从键盘一个字符一个字符的获取。void test_6() { int res1, res2, res3; res1 getchar(); res2 getchar(); res3 getchar(); printf(%d\n, res1); printf(%d\n,res2); printf(%d\n, res3); } void test_7() { // 读取一行数据 int res; while ((res getchar()) ! n) { printf( % d % c\n, res, res); } }通过一直读来清空缓冲区清空缓冲区的习惯写法int ch;while((ch getchar())! n) //这里没有大括号隐式类型转换隐式类型转换这一过程是自动完成的如果赋值表达式右边值的类型和左边变量的类型不匹配则赋值表达式右边值的类型会被隐式转换为左边变量的类型int a 10.1;//隐式类型转换数据截断char b 97.9f;//隐式类型转换数据截断double c 0.1;float d C;//隐式类型转换数据精度丢失转换等级了解一下基本就是根据这个类型能表示的范围整数不用说基本就是按照字节数float虽然是4字节但是是科学计数法所以范围要比整数大整数floatdoubleshortintdouble.shortintlonglong long float doublefloat和int虽然都是4字节但是float是科学计数法所以能存储的范围更大哪个桶更大更能装。桶大的放到桶小的就会溢出数据精度丢失整数提升算术转换。多种类型组合的时候最终的类型是什么玩意。整数提升当表达式中仅有int以及int以下等级的类型参与时表达式的结果一律是int或者unsignedint。char char intshort short intchar short int算术转换遵循算术转换的规律。表达式的结果是里面最大的玩意。表达式的最终结果类型是表达式中取值范围和精度最大的那个操作数的类型。intintintint longlongint long long long longfloat double double强制类型转换char ch a;int num2(int)ch; //这个就是强制类型转换布尔值在c中bool不是内置数据内容需要引入头文件stdbool.h才行需要知道哪些值为真为了表示布尔值C语言规定任何非零值都被视为true真任何零值都被视为false(假优先级和结合性主要作用和副作用表达式的主要作用表达式一定会计算出一个结果这个结果就是表达式的主要作用。一般来说表达式都是存在主要作用的。思考如何理解表达式的主要作用重要当小表达式处在大表达式当中时小表达式的主要作用发挥作用。在大表达式中每一个小表达式都是主要作用在起作用。但是副作用也不能忽略。表达式的副作用一个表达式有除了主要作用外的作用就是副作用常见的副作用有1.最常见的修改变量的值赋值。所有带赋值运算符””的表达式都具有这个副作用。int a102.执行了IO操作。函数调用就是一个表达式这时表达式的主要作用是函数的返回值。比如printf函数它会返回一个int整数这是主要作用。副作用是输出数据到终端显示器上。副作用和主要作用是相对独立的它们之间是不会互相干扰的。举例1.ab主要作用返回ab的值副作用没有副作用没有改变a/b的值没有io操作2.a1主要作用返回a1的值。副作用没有没有改变a的值没有io操作3.a(a1)主要作用返回a1的值副作用a的值被修改了。a14.intcabab主要作用返回ab的值没有副作用intcab主要作用返回c的值。副作用c的值被修改了。5.while((ch getcharO) !n)getchar()主要作用返回stdin里面的一个字符副作用执行了IO操作chgetchar()主要作用返回ch的值副作用修改了ch的值(chgetchar())n主要作用返回ch是否是\n. 副作用没有6.printf(%d,a)a主要作用返回old a副作用a1printf%da)主要作用打印成功的字符数副作用执行lO操作。总结1.表达式的主要作用在更大的表达式中发挥作用2.表达式的副作用相对独立不受主要作用影响理解表达式的主要作用和副作用可以帮助我们更好的理解表达式。更大的表达式。优先级和结合性优先级就是一个运算符的优先顺序。结合性就是在优先级相同的时候怎么结合先乘除后加减ab-c这个和-的优先级相同这时候就看结合性ab-cd/2:注意一些比较难的表达式(b-a1) ap优先级数字越小代表优先级越高越先进行计算。优先级数字一样的运算意味着具有相同的运算优先级它们同时出现在表达式中则需要考虑结合性决定计算顺序。需要的时候来查就行举例如果现在有一个数组下标[ab]。怎么求它的中间下标。假如a30000b310000用以前的公式假如ab是short类型就会越界(ab/2容易越界。如果a和b都接近最大值。(b-a/2a推荐大家这样写。b-a1)a后续进公司了有人这么写要能认识。但是自己写的时候按照第二种写法写。(b-a)/2a举例2在C里面我们聊的内存都是虚拟内存。num解引用。就是拿出对应地址的值。假设p是一个指针。就是存储地址的变量。pp:后续会经常用到。(p优先级后缀优先级更高。的优先级低p主要作用返回p原本的指向。副作用p1(p主要作用返回p地址指向的值整体返回p原本指向的值将p指针往后挪1