
C基础
文章平均质量分 85
C语言笔记
大谷呀
简答问题溯根源,复杂问题简单做。
展开
-
IEEE754标准浮点数转换
原文:https://blog.youkuaiyun.com/hqh131360239/article/details/81353582IEEE754标准浮点数转换IEEE754标准是一种浮点数表示标准,一般分为单、双精度两种,单精度是32位的二进制数,双精度是64位的二进制数,一个浮点数的组成分为三个部分。①第1位是数符s,s=1表示负数,s=0表示正数。②第2-9位为阶码E, (双精度为2-12位)③第10-32位为尾数M (双精度为13-64位)转换大致过程如下:首先将十进制数转为二进制数,用类转载 2020-12-07 16:31:13 · 12827 阅读 · 0 评论 -
不可重入函数使用
满足下面条件之一的多数是不可重入函数:使用了静态数据结构;(静态数据结构:由系统分配固定大小的存储空间,以后在程序运行的过程中,存储空间的位置和容量都不会再改变。如常用的整型.浮点型等类型数据,都属于静属态数据,他们的存储空间在程序执行过程中不能加以改变。)调用了malloc或free函数;printf - 引用全局变量stdoutmalloc - 全局内存分配表free - 全局内存分配表调用了标准I/O函数;(标准I/O函数很多实现都以不可重入的方式使用全局数据结构。)进行了浮点运算原创 2020-07-29 22:48:50 · 349 阅读 · 0 评论 -
位(bit), 字节(byte), 字(word),双字(dword or Qword)释义
https://www.cnblogs.com/zyanrong/p/11793358.html位(bit)位(bit) 来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态;两个二进制位可以表示00、01、10、11四种状态;三位二进制数可表示八种状态。字节(byte)字节(byte) 字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。 字节是通过网络传输信息(或在硬盘或内存中存转载 2020-07-29 22:20:28 · 29636 阅读 · 0 评论 -
C 32位无符号整型数据组装和拆分
//32位无符号类型取其8位#define BREAN_UINT32(var, byteNum) \ (uint8_t)((uint32_t)((var) >> ((byteNum) * 8) & 0x00FF))//#define BUILD_UINT32(byte0, byte1, byte2, byte3) \ ((uint32_t)((uint32...原创 2020-07-19 09:34:56 · 1411 阅读 · 1 评论 -
C 易失性关键字volatile
C的volatile关键字是一个限定符,在声明变量时将其应用于该变量。它告诉编译器变量的值可以随时更改-编译器在附近找到的代码不会采取任何操作。这意味着非常严重的。但是,在检查它们之前,让我们看一下语法。C的易失关键字的语法要声明变量volatile,请在变量定义的数据类型之前或之后包含关键字volatile。例如,这两个声明都将一个无符号的16位整数变量声明为易失性整数:volatile uint16_t x;uint16_t volatile y;现在,事实证明,指向易失性变量的指针非常普遍,翻译 2020-05-31 08:56:22 · 1631 阅读 · 0 评论 -
借助联合体调试程序
示例typdef enum{ FAIL = (uint32_t)0, OK = (uint32_t)1,} state_type_def;typedef union{ state_type_def Sdata;//Sdata为state_type_def数据类型 uint32_t Vdata;}//Sdata和Vdata为同一物理地址上的2钟数据类型,便于调试程...原创 2020-03-16 22:52:04 · 150 阅读 · 2 评论 -
大小端模式
大小端模式定义百度百科:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。...转载 2019-11-11 10:53:25 · 579 阅读 · 0 评论 -
C #pragma once 与 #ifdef
前言在vc6的时代头文件一般使用ifndef define endif,在vc7的时代头文件一般成了pragma once,不知道有没有人深究其中的意义。为什么有这样的代码,是为了头文件不被重复引用,那样编译器抱错的,这两种方法都是同样的目的,有没有区别呢?还是举例来说明,可能有好几个库,每个库内部可能都有public.h这个文件,如果使用#ifndef _public_h_#defi...转载 2019-10-17 14:45:27 · 610 阅读 · 0 评论 -
C sizeof与strlen的区别
记录用memcoy对数组进行赋值时,使用关键字sizeof()获取数据长度,导致hardfault内存溢出,修改为strlen解决。[头文件:#include<string.h>,函数原型:void memcpy(voiddest, const void *src, size_t n)]sizeof与strlen的差别char str[20] = "0123456789"; ...原创 2019-09-04 15:03:15 · 152 阅读 · 0 评论 -
一元、二元和三元运算符知识点
运算符有一元运算符、二元运算符及三元运算符。一元运算符有1个操作数。例如,递增运算符"++“就是一元运算符。二元运算符有2个操作数。例如,除法运算符”/“有2个操作数。三元运算符有3个操作数。例如,条件运算符”?:“具有3个操作数。运算符的行为还可能因所提供的操作数的数量而异。减法运算符”-"既是一元运算符又是二元运算符。...原创 2019-08-10 08:43:33 · 3708 阅读 · 0 评论 -
Y-modem协议
链接:https://blog.youkuaiyun.com/songisgood/article/details/62446482原创 2019-08-14 14:07:34 · 2376 阅读 · 0 评论 -
c宏定义-调试等级
简介宏定义调试等级,使用printf函数,精简代码。示例//宏定义#define MODULE_DEBUG_LEVEL 3#if (MODULE_DEBUG_LEVEL > 0)#define MODULE_UsrLog(...) printf(__VA_ARGS__);\ printf("\n");#else#define MODULE_UsrLog(...原创 2019-07-19 10:41:02 · 550 阅读 · 0 评论 -
C 隐式类型转换记录
类型转换问题代码//数据重组uint32_t u32Address = 0;uint8_t u8Buffer[4] = {0x12, 0x34, 0x56, 0x78};for (int i = 0; i < 4; i++) { u32Address += (uint32_t)(u8Buffer[i] << ((3 - i) * 8));}问题分析及修正后代码...原创 2019-01-16 14:53:39 · 457 阅读 · 0 评论 -
时间和空间复杂度初识
链接:https://blog.youkuaiyun.com/halotrriger/article/details/78994122 举例使用二分查找和斐波那契的递归和迭代方法,分别说明时间和空间复杂度。时间复杂度:首先要说的是,时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。 当我们面前有多个算法时,我们可以通过计算时间复杂度,判断出哪一个算法在具体执行时花费时间最多和...转载 2018-08-31 16:07:54 · 208 阅读 · 0 评论 -
C 枚举用法
枚举类型的定义形式为: enum typeName{ valueName1, valueName2, valueName3, …… }; enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字;valueName1, valueName2, valueName3, ……是每个值对应的名字的列表。注意最后的;不能少。例如,列出一个星期有...原创 2018-08-31 10:20:08 · 3522 阅读 · 0 评论 -
void及void指针类型整理
1.前言 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。转载 2017-10-18 16:25:50 · 312 阅读 · 1 评论 -
C 位运算应用技巧
位运算应用口诀: 清零取位要用与,某位置一可用或,若要取反和交换,轻轻松松用异或! 移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 “<<” 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。 3 “>>”右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 “>>>”运算符转载 2017-10-23 15:06:00 · 339 阅读 · 0 评论 -
C 数据类型大小
位:”位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。 字节:8个二进制位构成1个”字节(Byte)”,它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。 字:”字”由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那原创 2017-11-24 16:15:14 · 1965 阅读 · 0 评论 -
C memcpy()函数用法
函数原型void *memcpy(void*dest, const void *src, size_t n);功能由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。头文件#include<string.h>返回值 函数返回转载 2017-11-25 11:37:58 · 2598 阅读 · 0 评论 -
C 自定义字符串输出
C primer plus笔记1 笔记2 代码片void USART_SendStr(USART_TypeDef* USARTx, char *str){ if(NULL == str) { return; } while(*str!='\0') USART_SendByte(USARTx, *str++);}static void myDeb原创 2017-11-27 18:31:27 · 426 阅读 · 0 评论 -
C 链表的操作(C语言实现)
原博客地址:http://blog.youkuaiyun.com/lpp0900320123/article/details/20356143简述最近在做外部FLASH的动态存储(链表方式),对链表理解严重欠缺,在此标记补补。 学习数据结构,毋庸置疑链表必须学好,后面的栈、队列、树、图都是以链表为基础的;链表的种类很多,有单链表、双链表、循环链表、非循环链表;在此,我们以非循环单链表为例,来讲链转载 2018-01-22 11:52:51 · 280 阅读 · 0 评论 -
NOR flash 坏块处理方法
简述最近在处理FLASH的链表动态存储,同事提出flash中的坏块需处理,在此标记学习。笔记在NOR flash中,存储单元是互相并联的,每个存储单元的字线、源线分别相连。而在NAND flash中,存储单元是互相串联的,每个存储单元的字线、源线首尾相接。可靠性比较。闪存的可靠性通常可以分为使用寿命、坏块处理两个方面。闪存的使用寿命,指的是闪存中每个单元块进行重复编程和檫除的最转载 2018-01-23 10:07:28 · 2844 阅读 · 1 评论 -
C 指针a和&a
以指针形式和以下表形式对数组访问以指针形式,*( a + 4 ),a 数组首元素的首地址,偏移4个该类型的偏移量;以下表形式,a[4],被解析成指针形式操作,a数组首元素的首地址,加上括号内4个元素的偏移量,计算新的地址。代码#include int main() { printf("a 和 &a 的使用\n"); const int MAXN原创 2018-01-24 17:34:50 · 620 阅读 · 0 评论 -
C 循环队列的基本操作
原文地址:https://www.cnblogs.com/yudongxuan/p/7700490.html代码:#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#define MaxSize 5typedef struct node* SeQuence;struct node { char data[MaxSize]; ...转载 2018-06-05 16:55:01 · 374 阅读 · 0 评论 -
C 堆(heap)和栈(stack)小记
原文:http://www.jb51.net/article/69818.htm前言实际项目中,堆(heap)和栈(stack)很少亲力亲为去写,对其的理解都很朦胧,特记录以加深对堆(heap)和栈(stack)的理解。基础1、栈(stack)什么是栈,它是你的电脑内存的一个特别区域,它用来存储被每一个function(包括mian()方法)创建的临时变量。栈是FI...转载 2018-05-26 11:12:17 · 2645 阅读 · 0 评论 -
C strcpy和strncpy用法和区别
原文链接:https://www.cnblogs.com/xmxu/archive/2012/08/20/2647382.htmlNULL#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif#endifst...转载 2018-05-23 14:31:02 · 4944 阅读 · 0 评论 -
C 链表各类操作详解
链接:http://www.cnblogs.com/HappyEDay/p/5837258.html转载 2018-06-05 17:00:07 · 234 阅读 · 0 评论 -
C和指针-快速上手-小记
puts和printf的区别 puts()函数只用来输出字符串,没有格式控制,里面的参数可以直接是字符串或者是存放字符串的字符数组名。 printf()函数的输出格式很多,可以根据不同格式加转义字符,达到格式化输出。 puts()函数的作用与语句printf(“%s\n”,s);的作用形同。strcat函数将两个char类型连接。 char d[20]=”GoldenGlob...原创 2018-05-24 17:22:11 · 284 阅读 · 0 评论 -
C 头文件.h的写法
规范1.系统中为每个功能模块创建一个.h头文件。 一个功能模块实现系统的一个方面功能,它可能由多个.c和.asm文件(汇编语言的源程序文件)来实现,为它创建一个.h头文件。2.把一个模块的公共接口的函数原型放到.h文件中。这是public函数。 如:public.h3.不要在.h头文件中放private函数或private宏, 把它们放到.c文件中,并用static修饰函数。...转载 2018-06-13 09:56:12 · 4291 阅读 · 0 评论 -
C 内存字节对齐小结
原链接:https://blog.youkuaiyun.com/andy572633/article/details/7213465前言在C语言面试和考试中经常会遇到内存字节对齐的问题。今天就来对字节对齐的知识进行小结一下。首先说说为什么要对齐。为了提高效率,计算机从内存中取数据是按照一个固定长度的。以32位机为例,它每次取32个位,也就是4个字节(每字节8个位,计算机基础知识,别说不知道)。...转载 2018-06-09 17:14:31 · 355 阅读 · 0 评论 -
编写优质嵌入式C程序
目录(?)[+]1 简介2 C语言特性21处处都是陷阱211 无心之过212 数组下标213 容易被忽略的break关键字214 意想不到的八进制215指针加减运算216关键字sizeof217增量运算符和减量运算符218逻辑与和逻辑或的陷阱219结构体的填充22不可轻视的优先级23隐式转换3编译器 31不能简单的认为是个工具32不能依赖编译器的语义检查转载 2017-05-26 09:28:38 · 900 阅读 · 2 评论