01- 数据类型(C语言)

news2024/10/7 19:16:46

一 变量和常量

1.1 标识符

1、在我们所写的“第一个C程序”中出现了很多的标识符,例如includemainprintfreturn。标识符是⽤来标识变量函数,或任何其他⽤户⾃定义项⽬的名称
2、标识符的约束规范:

  • 只能包含数字、字母下划线
  • 不能以数字开头
  • 区分大小写

1.2 关键字

1. 当我们在使用C语言进行编程时,某些标识符会被用来表示特殊的含义或者作用并且不能用作他
用,我们就称这些标识符为关键字。
2. C语言提供了32个关键字:

  • 1) 数据类型关键字(12个)
    • charshortintlongfloatdoubleunsignedsignedstructunionenumvoid
  • 2) 控制语句关键字(12个)
    • ifelseswitchcasedefaultfordowhilebreakcontinuegotoreturn
  • 3) 存储类关键字(5个)
    • autoexternregisterstaticconst
  • 4) 其他关键字(3个)
    • sizeoftypedefvolatile

1.3 C语言中的数据类型

在实际开发过程中我们需要处理各种类型的数据,C语言提供的数据类型如下图所示:

1.4 常量

  • 在程序运行过程中,其值不能被改变的量
  • 常量一般出现在表达式或赋值语句中
  • 单引号是字符,双引号是字符串!!!

1.5 变量

变量的定义:

  • 我们可以把变量理解为一个存储数据的容器
  • 在程序运行过程中其值可以被改变
  • 变量在使用前必须要被定义
  • 变量定义的语法:type variable_list
    • 在这⾥,type 必须是⼀个有效的 C 数据类型,可以是 char、int、float、double 或任何⽤
      户⾃定义的对象,variable_list 可以由⼀个或多个标识符名称组成,多个标识符之间⽤逗号分隔。下⾯列出⼏个有效的声明:
int i, j, k;
char c, ch;
float f, salary;
double d;
  • 变量一旦被定义就在内存上占用了一块对应大小的空间

变量的命名规则

  • 遵循标识符的命名规范
  • 不能使用关键字
  • 见其名知其义,在实际开发过程中,我们一般建议使用英文单词或者英文单词的缩写作为变量名

常用变量名:

  • tmp:临时变量
  • cnt:计数器

二 整型:int

1. 各种整型类型的使用和对比

2. 可以通过 sizeof 关键字获取某个数据类型所占用的空间 

printf("%d\n", sizeof(short));  //2
printf("%d\n", sizeof(int));    //4
printf("%d\n", sizeof(long));   //4
printf("%d\n",sizeof(long long));  //8

3. 字节(Byte)和比特(bit)

  • bit位,即0或者1,0101010110
  • Byte字节,8位比特作为一个字节,字节是处理数据的基本单位
  • 1Byte= 8bits
  • 1KB = 1024Bytes
  • 1MB = 1024KB
  • 1GB =1024MB
  • 注意:B和b的区别

4. 数据总线

  • 输出数据
  • 总线的根数越多,数的表示范围也越大

5. 有符号数和无符号数取值范围

总结:软件开发过程中如果我们知道需要存储的数据不会为负数时,变量可以定义为无符号的整
数,这样可以扩大能够存储的最大正整数的值
6. 整型数据的表示 

7. 整型数据的打印格式 

#include <stdio.h>
int main()
{
    short a = 10;
    int b = 10;

    long c = 10l; //或者10L
    long long d = 10ll; //或者10LL
    printf("sizeof(a) = %u\n", sizeof(a));
    printf("sizeof(b) = %u\n", sizeof(b));
    printf("sizeof(c) = %u\n", sizeof(c));
    printf("sizeof(c) = %u\n", sizeof(d));
    printf("short a = %hd\n", a);
    printf("int b = %d\n", b);
    printf("long c = %ld\n", c);
    printf("long long d = %lld\n", d);
    unsigned short a2 = 20u;
    unsigned int b2 = 20u;
    unsigned long c2= 20ul;
    unsigned long long d2 = 20ull;
    printf("unsigned short a = %hu\n", a2);
    printf("unsigned int b = %u\n", b2);
    printf("unsigned long c = %lu\n", c2);
    printf("unsigned long long d = %llu\n", d2);
    return 0;
}

三 字符型:char 

1. 字符型变量用于存储一个单一字符
2. char 和 unsigned char 定义变量
3. 每个字符变量都会占用 1 个字节(1 Byte)
4. 用一对英文半角格式的单引号(' ')引用
5. 使用 %c 输出

#include <stdio.h>
int main()
{
    char ch = 'A';
    printf("char: %c\n", ch);
    return 0;
}

6. 字符在内存中存储时是以这个字符的ASCII编码进行存储的:

  • char的本质就是一个1字节大小的整型
char ch;
ch = 'A'; //ch

ASCII 码大致由以下两部分组成:

  • ASCII 非打印控制字符: ASCII 表上数字 0-31 分配给了控制字符,用于控制打印机等一些外围设备。
  • ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。

7. 大小写转换

  • 大写转小写:+32 / +0x20
  • 小写转大写:-32 / -0x20
#include <stdio.h>

int main(){
     //字符型数据
     char ch;
     ch = 'A';
     printf("char: %c\n", ch);  //A

    ch = 65;
    printf("65: %c\n", ch);  //A
    printf("65: %d\n", ch);  //65

    printf("A : %c\n", 'A');  //A
    printf("A -> a: %c\n", 'A'+32);  //a

    return 0;
}

8. 整数的字符形式

  • 整数转字符形式: +48 / +'0'
  • 字符形式转整数: -48 / -'0'

9. 转义字符

四 实型(浮点型):float、double

  • 实型变量也可以称为 浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比float 型变量更精确。
  • 由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
  • 不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。
#include <stdio.h>
int main()
{
    //传统方式赋值
    float a = 3.14f; //或3.14F
    double b = 3.14;
    printf("a = %f\n", a);
    printf("b = %lf\n", b);
    //科学法赋值
    a = 3.2e3f; //3.2*1000 = 3200,e可以写E
    printf("a1 = %f\n", a);
    a = 100e-3f; //100*0.001 = 0.1
    printf("a2 = %f\n", a);
    a = 3.1415926f;
    printf("a3 = %f\n", a); //结果为3.141593
    return 0;
}

4.1 进制

进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

4.1.1 二进制

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

  • 当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
  • 十进制转化二进制的方法:用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
  • 十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部
    分,顺序看取整后的数就是转化后的结果。

五 计算机内存数值存储方式

1 在计算机系统中,数值一律用补码来存储

2. 补码的特点

  • 对于正数,补码就是原码(原始的二进制)
  • 对于负数,其补码为它的反码加1
  • 负数的反码:绝对值的原码取反
#include <stdio.h>
int main()
{
    int a = -15;
    printf("%x\n", a);
    //结果为 fffffff1
    //fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001
    //符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
    //上面加1:1000 0000 0000 0000 0000 0000 0000 1111 最高位1代表负数,就是-15
    return 0;
}

3. 经典笔试题

int a = 5;
unsigned int b = a-10;
printf("%d\n", a > b);

六 关于printf(“%f\n”,3/2)

通过运行程序我们发现程序的输出结果是 0 !!
我们首先要明白一个问题,在C语言里面,除数和被除数都是整数的时候,商的类型也是个整数。
比如这里的3/2,得到的不是1.5,而是下取整之后的结果1
我们知道整数1在内存中存储时的二进制为:0000 0000 0000 0000 0000 0000 0000 0001 ,可是
我们在输出结果时,计算机会将整个二进制当成浮点数来处理,那么问题来了:这个二进制所表示
的浮点数到底是多少呢?

下面,让我们来一起揭开浮点数存储的神秘面纱:

  • 浮点数的存储遵循的是 IEEE754 标准,任意一个二进制浮点数可以表示成下面的形式:

6.1 例1

已经浮点数的二进制形式,计算浮点是的十进制值:

6.2 例2

已知一个十进制浮点数,计算二进制形式:

在了解了浮点数在内存中的存储方式了以后,下面我们来看看1的二进制如果转换成浮点数会
是多少呢?
显然,符号为0,那么s为0
阶码E也为0,则指数e = 阶码E - 127 = -127
M是多少呢,很显然是2的-23次方,约等于0
所以最终的结果就为0啦 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么删除列表

Python怎么删除列表 什么是Python列表&#xff1f; 在Python中&#xff0c;列表是一个可变的序列&#xff0c;它可以包含不同类型的数据。列表可以使用中括号 [] 来定义&#xff0c;每个元素之间用逗号分隔。列表中的元素可以通过其下标进行访问&#xff0c;下标从0开始。 P…

Skywalking基础使用

Skywalking基础使用 agent的使用Linux下Tomcat7和8中使用Spring Boot中使用RocketBot的使用 agent的使用 agent探针可以让我们不修改代码的情况下&#xff0c;对java应用上使用到的组件进行动态监控&#xff0c;获取运行数据发送到OAP上进行统计和存储。agent探针在java中是使…

C语言之数组初级(5-8)

目录 1. 一维数组的创建和初始化 2. 一维数组的使用 3. 一维数组在内存中的存储 4. 二维数组的创建和初始化 5. 二维数组的使用 6. 二维数组在内存中的存储 7. 数组越界 8. 数组作为函数参数 二维数组的画图讲解 例如现在我要找第二行第三列这个元素&#xff0c;下面是…

放大电路与频率特征(期末模电速成)

目录 1、放大电路基础 2、放大电路三种组态 3、放大电路分析&#xff08;必考&#xff09; 4、多级放大电路 5、差动放大电路 6、频率特征 1、放大电路基础 晶体管输出特性曲线中的线性区域是指 放大区 &#xff0c;iC βiB NPN 型静态工作点过高&#xff0c;容易产生 饱…

Vue 中的表格操作

Vue 中的表格操作 在 Web 开发中&#xff0c;表格是非常常见的元素之一。在 Vue 中&#xff0c;我们可以使用一些组件和插件来实现表格的操作。在本文中&#xff0c;我们将介绍 Vue 中的表格操作的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理解。 表格…

Scrapy爬取数据,使用Django+PyEcharts实现可视化大屏

项目介绍 使用Scrapy进行数据爬取&#xff0c;MySQL存储数据&#xff0c;Django写后端服务&#xff0c;PyEcharts制作可视化图表&#xff0c;效果如下。 项目下载地址&#xff1a;Scrapy爬取数据&#xff0c;并使用Django框架PyEcharts实现可视化大屏 发现每个模块都有详情页…

Django---------创建、运行

目录 1.安装django 2.pycharm&#xff08;专业版&#xff09;创建项目 3.默认项目的文件介绍 4.App的创建和说明 5. 启动运行django 1.确保app已注册[settings.py] 2. 编写URL和视图函数对应关系[url.py] 3.编写视图函数[views.py] 4.启动django项目 1.安装django pip…

C语言之函数栈帧的创建与销毁讲解(1)

在前期的学习中我们可能有很多困惑 例如&#xff1a;局部变量是怎么创建的 为什么局部变量的值是随机值 函数是怎么样传参的 传参的顺序是什么 形参和实参的关系是什么 函数调用是怎么做的 函数掉调用结束后怎么返回的 这篇博客我们来修炼自己的内功&#xff0c;掌握好这篇…

MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

MySQl学习&#xff08;MySQL数据库&#xff0c;从入门到精通&#xff1a;第四篇——MySQL中常用的运算符及其用法 第四篇_MySQL中常用的运算符及其用法运算符1. 算术运算符1&#xff0e;加法与减法运算符2&#xff0e;乘法与除法运算符3&#xff0e;求模&#xff08;求余&#…

【Linux】在工作站或服务器上实现多个GUI图形界面同时进行操作,多个用户同时操作互不干扰

一、问题背景 因为我们团队有几个人需要做仿真&#xff0c;一个工作站不够用&#xff0c;经常是一个人操作的时候另一个人就眼巴巴等着。 我在想能不能实现一种方案&#xff0c;能使两个人一起操作仿真软件呢&#xff1f; 这种方案&#xff0c;目前网上比较流行是x11-forwar…

NLP——ELMO;BERT;Transformers

文章目录 ELMOELMO 简介ELMO 优点利用了多层的 hidden 表示ELMO 缺点 BERTBERT V.S. ELMO两种预训练任务Object1: Masked Language ModelObject2: Next sentence prediction 训练细节如何使用 BERTBERT 应用——垃圾邮件分类 Transformerself-attentionMulti-head AttentionTra…

chatgpt赋能python:Python中如何判断奇偶数

Python中如何判断奇偶数 当我们在Python中编写程序时&#xff0c;有时需要判断一个数是奇数还是偶数&#xff0c;因为根据不同的情况&#xff0c;我们需要对不同的数值进行不同的处理。那么在Python中&#xff0c;该如何判断一个数是奇数还是偶数呢&#xff1f; 判断奇偶数的…

【JavaEE进阶】mybatis

目录&#xff1a; 一、Mybatis是什么 三个映射关系如下图&#xff1a; 二、mybatis的使用&#xff08;前置工作简单案例&#xff09; 第一步&#xff1a;导入MAVEN依赖 第二步&#xff1a; 在spring项目当中新建数据源 第三步&#xff1a;新建一个实体类&#xff0c;是和…

Shell编程规范与变量使用

目录 一、Shell编程概述 1.Shell脚本的概念 2.Shell脚本的应用场景 3.Shell的作用 4.Linux系统中支持的shell 二、Shell编程规范 1.编写Shell脚本规范步骤 2.Shell脚本执行方法 &#xff08;1&#xff09;以绝对路径执行&#xff08;需要赋予脚本文件执行权限&#xf…

stable diffusion webui 文生图(txt2img)api接口调用(使用C#)

唠嗑 本次将跟读者讲一下如何通过C#请求sd webui api 【txt2img】接口&#xff0c;如果读者觉得文章有用&#xff0c;请给【点个赞】吧&#xff0c;有问题可以评论区提问。 实战 1.配置api启用参数 启动webui时&#xff0c;需加上【–api】 命令以保证api接口可以被调用。如…

Shell脚本文本三剑客之awk编辑器

目录 一、sed编辑器简介 二、sed工作流程 三、sed命令 四、sed命令的使用 1.sed打印文件内容&#xff08;p&#xff09; &#xff08;1&#xff09;打印文件所有行 &#xff08;2&#xff09;打印文件指定行 2.sed增加、插入、替换行&#xff08;a、i、c&#xff09; …

Shell脚本之正则表达式详解

目录 一、正则表达式简介 二、正则表达式的组成 三、正则表达式分类 四、正则表达式字符用法 1.基础正则表达式常见元字符&#xff08;支持grep、egrep、sed、awk&#xff09; 2. 扩展正则表达式元字符&#xff08;支持&#xff1a;egrep、grep -E、awk、sed -r&#xff…

C语言之数据在内存中的存储(2)

本章重点&#xff1a;浮点数在内存中的存储 浮点数&#xff1a;数学中的小数 eg.123.45 12.345*10^1 1.2345*10^2 1E10&#xff1a;1.0*10^10 整型家族的类型&#xff0c;表示范围&#xff1a;limits.h 浮点数&#xff1a;float.h 大家可以猜测一下打印的这四个数字…

Unity中动画系统的性能优化

降低骨骼数&#xff0c;减少面片数。 方法&#xff1a; 1.勾选Optimize Game Objects&#xff0c;以剔除骨骼节点对应的Transform节点 2.开启多线程渲染选项 主要影响的函数调用开销&#xff0c;可以在profiler中查看&#xff1a; Animators.Update MeshSkinning.Update C…

【TCP/IP】多进程服务器的实现(进阶) - 信号处理及signal、sigaction函数

目录 信号 signal函数 sigaction函数 尝试用信号来处理僵尸进程 我们在之前学习了如何处理“僵尸进程”&#xff0c;但也会有疑问&#xff1a;调用wait和waitpid函数时我们关注的始终是在子进程上&#xff0c;那么父进程上的管控&#xff08;对于子进程&#xff09;该如何实…