
c语言知识
文章平均质量分 86
liuyunluoxiao
小白但努力,记录我每天的成长
展开
-
字符型(char)数据在内存中的存储
最高位(最左端的那一位)为符号位,符号位只表示正负(0为正,1为负)不存储数据。所以有符号char的在内存中取值范围为10000000~01111111。char,int,short int类型的值的加减其实是一个循环。那么怎么判断自己的电脑用的编译器char是有符号还是无符号的呢?所以我的电脑的编译器中只写char时char是有符号的。虽然数据在内存中都是以二进制的方式进行存储的,但是。在内存中存储的11111111其实存储的是-1。所以有符号char(signed char)原创 2024-04-27 09:43:02 · 927 阅读 · 27 评论 -
浮点数在内存中的存储
比如,2^10的E是10, 所以保存成32位浮点数时,E必须保存成10+127=137 即二进制的。即 浮点数的小数的二进制表示是1(或0)*2的-k + 1(或0)2的-(k+1)以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。,因为凑不出二的几次方加二的几次方,正好等于小数点后的那几个数。有效数字M不再加上第一位的1, 而是还原为0.*xxxx的小数。浮点数的小数点后数的二进制表示是以2的-k加出来的。,double的E也是无符号数,所以E的范围为。原创 2024-04-27 09:34:43 · 649 阅读 · 18 评论 -
整型提升和截断
CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。每次char,short类型计算都要用整型提升后的补码运算不会太麻烦了吗?难道每次char,short类型计算都要用整型提升后的补码运算吗?我也不是特别懂,所以我结合了我的理解和我查找到的资料总结了以下。对int类型的数值作运算时,CPU的运算速度是最快的。整型提升是直接在char的8个比特位的补码前。,要发生截断(截断也是用补码),截断时是补码。如char a=3,在内存中存储的补码是。原创 2023-11-20 10:02:07 · 270 阅读 · 6 评论 -
手把手教你用C语言写扫雷(包含递归,数组,随机数等知识点)
①定义两个二维数组,一个mine,一个show(为什么定义两个数组?因为扫雷的时候,总得给别人看一个要扫雷的区域吧,只有一个数组+printf会很麻烦)mine用来存放雷,show用来存储标记和一个坐标周围雷的个数。②数组的行列,扫雷的时候,扫一个位置,该位置就会显示它周围一圏雷的个数,既然是周围的一圏,那么处理角/边缘上的位置扫的时候就要分类讨论,这样太麻烦,不如。原创 2023-12-18 10:59:47 · 1142 阅读 · 13 评论 -
枚举体和共用体
enum是枚举关键字{}内的量是枚举常量,枚举常量之间用逗号分隔(最后一个枚举常量后什么符号也不放)枚举常量都有值,默认为第一个创建的枚举常量的值为0,第二个为1,以此类推(如上图)也可以改变默认枚举常量的值同一程序不能有同名的枚举类型(enum 枚举名),且不同的枚举类型中不能存在同名的枚举成员不能将一个数值直接赋值给枚举变量,如enum sb aa=3是错误的但是可以强制类型转换,将常数转换为对应枚举类型,同类型的枚举数据可以进行关系运算和算术运算。原创 2023-12-27 09:59:29 · 634 阅读 · 2 评论 -
C语言分支结构和循环结构
因为第一个if的()中的a==1为假,所以第二个if不会被执行,第二个if的()中的语句不会被判断真假,else也就不会执行。if,else,else if如果它没有紧随其后的{},那么它们都只能掌控一条紧跟其后语句。只有它的前一个if不执行时else if才会判断它后面的()中的语句的真假。因为else执行的条件是与它对应的if的()中的语句为假,else才执行。,并依据此判断执不执行else if的{}中的语句。2.判断部分,即while的()中的预句,if条件判断语句,判断后面的()内的。原创 2023-12-02 21:27:44 · 335 阅读 · 6 评论 -
详解结构体(包含结构体内存对齐,柔性数组,位段)【尊嘟很详细】
(struct+结构名+{})int a;char b;//分号不能少//结构体成员不能在结构体内赋初值关键字struct与结构名一起构成结构类型名例struct books是一个结构类型名结构体可以嵌套定义但结构体定义时不允许将成员的数据类型定义成自身的结构类型,这是因为结构类型的声明是构造阶段,系统还不知道需要分配多少内存空间。但是结构类型中可以含有指向自身类型的指针变量。①在结构体定义时定义,此时变量位于结构体{}之后的;之前②在结构体定义完后定义③在匿名结构体定义时定义。原创 2023-12-25 13:28:42 · 1814 阅读 · 7 评论 -
#define定义宏
定义是宏名必须于它的参数括号紧挨,中间不能有任何符号,空格都不行。向宏中传参的时候是直接把传进去的参数直接替换,而不是先计算表达式再传参。所以如果你的参数只有一个,但你却传了一个表达式,他会把这个表达式直接替换进去,这个时候如果不加括号,肯定就会出现错误。例因为*的优先级大于+,所以他得到的结果不是36,而是11。此时加上括号就可以解决即 square(x) (X)*(X)其实光给X打括号还不够安全例我们想要的来是,3传进去得到6,6在与10相乘得到60。原创 2023-12-28 17:07:13 · 1334 阅读 · 2 评论 -
c语言编译和链接
当可执行程序被操作系统加载到内存中时,由于所有的符号已经在链接过程中被重定位,因此程序可以直接使用这些符号,而不需要再进行地址绑定。在静态链接过程中,链接器会在编译后的目标文件中将所有的符号(函数名、变量名等)和它们的地址进行绑定,并将这些地址填写到可执行文件中。在C语言程序链接过程中,重定位是一种重要的步骤,它涉及将不同的目标文件中的符号(函数或变量)的地址合并到一个单独的可执行文件中。C语言的链接过程中,地址和空间分配是一个重要的环节,它涉及到程序的内存布局,即程序在内存中如何分布及其各自的地址范围。原创 2024-02-01 21:30:57 · 1917 阅读 · 33 评论 -
用C语言手把手教你写贪吃蛇
定义一个结构体Snake将贪吃蛇游戏的状态和蛇的状态放入其中,方便管理pSnake:我们使用单链表来维护蛇的身体,pSnake就指向蛇身单链表的第一个节点SnakeSpeed:因为程序执行得太快,所以需要停顿给玩家反应时间,停顿时间越长蛇的速度越慢,停顿时间越短!!原创 2024-02-03 16:51:37 · 1725 阅读 · 19 评论 -
字符串相关函数【超详细】(strcpy,strstr等string.h中的函数)
size_tstrlen返回值【size_t】:无符号整型函数参数【str】:要计算长度的字符串的首地址char*strcpy返回值:目标字符串(destinatuon)的首地址第一个参数(destinatuon):目标字符串的首地址第二个参数(source):源字符串的首地址char *strcat返回值【char*】:目标字符串的首地址参数1【destination】:目标字符串的首地址参数2【 source】:源字符串的首地址intstrcmp。原创 2024-01-25 11:02:49 · 1940 阅读 · 37 评论 -
文件指针及文件操作函数
失败返回EOF。原创 2024-01-21 17:57:43 · 1156 阅读 · 4 评论