一、数据类型

server/2025/3/5 6:58:23/

1.1 c 语言 中 数据类型

类型字节数取值范围
int2- 32768 ~ 32767 (5位十进制数)
int4- 2147483648 ~ 2147483647 (10位十进制数)
unsignde int20 ~ 65535 (5位十进制数)
unsignde int40 ~ 4294967295 (10位十进制数)
short2- 32768 ~ 32767 (5位十进制数)
unsigned short20 ~ 65535 (5位十进制数)
long4- 2147483648 ~ 2147483647 (10位十进制数)
usigned long40 ~ 4294967295 (10位十进制数)
long long8- 9223372036854775808 ~ 9223372036854775807(20位十进制数)
unsigned long long80 ~ 18446744073709551615 (20位十进制数)
  • 整形 :内存中存放的是补码

    • 两个整数相除,结果直接舍弃小数部分

  • 数字默认为 int 型,数后加 l ---> ☞为long型

  • 枚举 :Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。这就是枚举的本质。

  • 一些浮点数资料:

  • void 类型

    1函数返回为空 ,C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
    2函数参数为空, C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
    3指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。
  • struct 结构体名{

    char a[10] ;

    int age;

    };

    struct 结构体名 变量名;

    变量名.a 变量名.age

  • 结构体大小规则

    • 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

    • 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

    • 结构体大小结果要为成员中最大字节的整数倍。--》min(结构体成员最大字节,各个数据类型默认字节对齐数)

    • 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。gcc中默认#pragma pack(4),可以通过预编译命令#pragma pack(n),n = 1,2,4,8,16来改变这一系数。

      32/64位Linux上GCC编译环境下各类型变量的自身对齐参数

  • union 两个变量共用一个空间,一般通过一个变量接收数据,搭配另一个变量以位域的方式区分数据内容。

  • C/C++语言中数据类型 大小(字节)

    double 8

    float     4

    long     4

    int        2 (32位或64位系统下int的长度为4字节)

    char     1

  • 1 Byte(B字节) = 8 bit(位)--> 0001 0001

    二进制序列用以表示计算机、电子信息数据容量的量纲,基本单位为字节B,字节向上分别为KB、MB、GB、TB,每级为前一级的1024倍,比如1KB=1024B,1M=1024KB。

  • 对于32位计算机与64位计算机,字的大小往往不同。

    32位计算机:1字=32位=4字节,64位计算机:1字=64位=8字节

1.2 变量

1.2.1 变量知识点

  • c文件不互通,有封装性

  • 32位机 为基础的变量所占的字节

  • 变量的完整定义

    【存储类型】 【符号类型】 【变量的类型】 【变量的名字】

                                                             int                       a

  • 【符号类型】

    1. 有符号(默认):signed 1位存 符号位 + 31 位 存的数据 有符号- +

    2. 无符号 :unsigned 32位存的数据 无符号,最小为 0

  • 【存储类型】

    • 未声明变量存储类型时,隐式声明为 auto型存储类型

    • auto :栈里面函数中的局部变量

    • 生命周期 :变量的声明处开始,到函数结束为止

1.2.2 变量的存储类型与作用域

  • auto 自动类型          ,栈

  • static 静态                ,数据段(bss段,未初始化数据段)

  • extern 扩大作用域    ,引用全局变量

  • register 寄存器,glibc库源代码,变量放于CPU内

  • 重要的数据存储:

    • main函数中

    • 堆区

    • static

    • 全局变量

  1. 局部变量

    • 作用域:变量的声明处开始,到函数结束为止

    • 生命周期:函数调用处开始,到函数调用结束为止

    • 是栈里面函数中的局部变量(auto类型)

  2. 静态局部变量

    • 作用域:变量声明处开始,到函数结束为止

    • 生命周期:从程序开始到程序结束

    • 存储在静态存储区域,必须初始化

  3. 全局变量

    • 作用域:从声明处开始,到本.c结束为止

    • 生命周期:从程序开始到程序结束

    • 通常在本.c最上面的位置

    • 命名:g_count -> global

  4. extern 关键字

    • 只能给全局变量声明

    • extern+类型+全局变量名字(此时不能直接赋值,只是声明,并非定义分配空间)

      • 函数内extern,只在这个函数内可见

      • 函数外extern,从此开始到本.c结束为止都可见

      • 可在本.c的不同位置使用,也可以在他.c里面使用

    • 不能轻易使用,破坏了变量的作用域,从而产生意想不到的错误,增加程序理解的难度

  5. static 关键字

    • 作用域:从声明处开始,到本.c结束为止

    • 生命周期:从程序开始到程序结束

    • 命名:s_count

  6. 静态全局

    • 通常在本.c的最上面

    • 对于整个工程来说,名字不能重复

    • 相比全局的好处:只在本.c可见,那么在工程里面就可以多次使用

    • 不能对静态全局使用 extern 关键字声明

  7. 全局与静态全局的差别

    • 如果 全局变量声明前加上 static 关键字的话,那么就限定了此变量只能在本.c内使用

    • 一般情况下,C语言需要用到全局变量的话,就用static关键字去限定他,这样可以保护他不被 他.c 改变

 static int a;//静态局部int main(){add();//第一遍add 2add();//第二遍add 3    return 1;                      }int add(){static int a = 1;//若不为static ,函数调用一次,栈区释放一次,a的值不会随着调用累积。a += 1;pritnf("a = %d\n", a);}//register;寄存器类型变量,上述add中的 a,b参数(本身就有存储位置)

9.静态函数在a.h文件下如何让其在main.c文件下使用

1.3 格式控制符

         char a ;         ---- %c          1字节char n[5];       ---- %s          5字节short            ---- %d          2字节int              ---- %d          4字节long             ----%ld          8字节unsigned float            ---- %f          4字节double           ---- %lf         8字节科学计数法        ---- %eenum             ---- %d

1.4 说明符和转义字符

  • 记忆 : " d o u x/X" --> “都行”

  • C 语言中 printf 输出 double 和 float 都可以用 %f 占位符 可以混用,而 double 可以额外用 %lf

    而 scanf 输入情况下 double 必须用 %lf,float 必须用 %f 不能混用

1.5 原码、反码、补码、解码

可看成时钟 满12归1 12 - 5 = 7 12 + 7 = 19

计算机 减法可用加法替代,加数即为补码

如:

-5 ​

原码:1000 0101 ​

反码:1111 1010

                       +1 ​

补码:1111 1011

原 + 反 = 0111 1111 ​

原 + 补 = 1000 0000

摘录:

补码原理与负数表示-CSDN博客

补码只是一种编码格式,它不是表示真正大小的数字。

假设计算机只能存两位,最大为99,则原码+补码=100:

9-49

=9+51

=60

60是-40的补码,100-40 = 60;

计算机只识别补码60,之后就会解码将其转化为实际数字-40。

人类是如何给计算机赋予负号的含义。就是通过补码的编码与解码。

1.6 常量

  • 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量

    常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

    常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

  • 符号常量

    用标识符代表常量,定义格式 :

    #define 标识符 常量

    //不分配空间 将在代码中的标识符位置直接换为常量值 //宏定义最后不是以分号结尾的 //宏定义是无类型

    const 类型 符号常量 = 常量 ​ //结尾为分号 ​ //类型声明 ​ //符号常量 和 常量之间是以等号链接

    *define宏定义在预编译时不会进行语法检测,相对来说,多用 const

  • 字符常量:指单个ASCII码字符,有256个,如’a’和’b’。

  • 数值常量:包括整型常量和实型常量。整型常量就是指常整数,有十进制、八进制、十六进制三种表示形式。实型常量只采用十进制小数形式和指数形式表示,包括单精度浮点数(float)、双精度浮点数(double)和长双精度浮点数(long double)。

  • 常变量:具有变量的特征是存在一个以变量名命名的存储单元,在一般情况下,存储单元中的内容是可以变化的。而对于常变量,在变量的基础上加了一个限定:存储单元中的内容不允许变化,仍然是有存储单元的。

  • 直接常量:整型 实型 字符 字符串

  • 符号常量:是使用一个字符串代替程序中出现的一个标识符,是编译时把所有的符号常量都替换成制定的字符串,它没有类型,在内存中也不存在以符号常量命名的存储单元。在其作用域内其值不能改变和赋值。

1.7 常量的合法规则

判别合法的C语言常量。历年来多次重复考。

1.7.1 合法的整型常量。

十进制、八进制(以0开头,如0123合法的八进制,0128不合法的八进制)、十六进制(以0x开头,如0x125,0xef) 注意:是数字0不是字母o 或O ,16进制大小写一样。在整形常量末尾加L表示是长整型(long, 也是整型但比int型数值范围大),是合法的。如115L,就是长整型常量。

1.7.2 浮点型常量。

可以为十进制小数形式,但必须有小数点。如:0.1 0.0 12.0 12. .12 等。还可以为指数形式,但注意字母e或E前必须有数字,e后必须为整数。如:e3,2.e.5,e3都不合法。合法如:.5e3 5.5e3 5e3

C编译系统默认将浮点型常量作为double 型处理。因此,如0.123实际上系统当成double型数据,而0.123f,0.123F才按照float处理。这在实际运行中,不加f只是先按double型处理,然后转换成float型,降低了运行的速度,其他并无大碍。

1.7.3 字符型常量。

注意:字符型常量是用单引号括起来的单字符。合法的:’3’ ’a’ ‘b’ ‘\n’ ‘\’ ‘\b’ ‘\t’ ‘\r’ ‘\f’ ‘\’’ ‘\”’ ‘\ddd’ ‘\xhh’ 其中的ddd是1~3个 八进制数所代表的字符,hh是1到2个十六进制数所代表的字符。

1.7.4 符串常量。

是用双引号括起来的一串字符。合法的:“3”, “3a”,”3a\t\\b\r\x33\12”等。常考字符串的长度大小为多少。

1.8 转义字符的合法形式

合法的转义字符如下:

1、八进制转义序列:\0

\ + 1到3位数字;范围'\000'~'\377'

\0:空字符

十六进制转义字符\x

它是由反斜杠\和字母x(或X)及随后的1~2个十六进制数字构成的字符序列

(八进制转义字符和十六进制转义字符,不在前面加0!)

2、Unicode转义字符:\u + 四个十六进制数字;0~65535

\u0000:空字符

3、特殊字符:就3个

":双引号

':单引号

\:反斜线

4.控制字符:5个

\r 回车

\n 换行

\f 走纸换页

\t 横向跳格

\b 退格


http://www.ppmy.cn/server/172533.html

相关文章

P7使用pytorch实现马铃薯病害识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集 这次我们使…

初识Qt · 信号与槽(2)

目录 前言: 信号和槽初识 两个问题 前言: 本文我们正式开始介绍信号与槽这个概念,在谈及Qt中的信号与槽这个概念之前,我们不妨回顾一下Linux中的信号,比如发生了除0错误,OS就会给该进程发送一个信号&am…

Hive 3.1 在 metastore 运行的 remote threads

Remote threads 是仅当 Hive metastore 作为单独的服务运行是启动,请求需要开启 compactor。 有以下几种: 1. AcidOpenTxnsCounterService 统计当前 open 的事务数 从表 TXNS 中统计状态为 open 的事务。此事务数量可以再 hive metrics 中。 2. Acid…

SPI驱动(一) -- SPI协议

文章目录 一、SPI硬件连接框图1.1 引脚说明1.2 连接说明 二、SPI协议2.1 SPI传输示例2.2 SPI工作模式 三、总结 一、SPI硬件连接框图 SPI硬件连接框图如下: 1.1 引脚说明 SCK:Serial Clock,时钟引脚DO(MOSI):Master Output, S…

使用easyocr、PyPDF2对图像及PDF文档进行识别

一、概述 本 Python 脚本的主要功能是对当前目录及其子目录下的图片和 PDF 文件进行光学字符识别(OCR)处理。它使用 easyocr 库处理图片中的文字,使用 PyPDF2 库提取 PDF 文件中的文本,并将处理结果保存为文本文件。同时&#xff…

kaggle竞赛(初识)

PART 0 : Kaggle 介绍 Kaggle是什么? 答案很简单Kaggle是数据挖掘比赛火起来的,以至于中国兴起了很多很多类似的比赛;Kaggle 是一个数据科学竞赛的平台,很多公司会发布一些接近真实业务的问题,吸引爱好数据科学的人来…

5. 快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序 元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有 元素均小于基准值,右子序列中所有元素均…

Windows10系统构建本地安全私有化的个人知识库——采用DeepSeek+RAGFlow

一、为什么要构建本地私有化个人知识库 1.1、自身需求 1、需要相关隐私资料内容的安全保护可控; 2、需要根据自身的隐私资料内容构建出个性化的知识库; 一些常见的业务场景如:①希望我们的智能助手可以根据公司的管理制度回答问题,让员工可以随时了解公司相关制度内容信息;…