C语言中的数据类型有哪些?

news2024/11/20 4:16:44

在这里插入图片描述

  • 有符号数signed可以存储负数,无符号数呢只能存储非负数

我们要考虑两个问题。

  • 第一个问题是要存储的这个整数,它是一个多大的范围,比如说要存储一个五。还有比如说我可能要算个数65535,或者说我要算出一个数65536,可能这个数据本身比较小,也可能会比较大。那么,你在存储的时候,你可能会担心我的这个数据很大,那么我现有的这个类型存不存得下,这是一个要考虑的问题,那么,
  • 另外一个问题是,当你去存储的时候,你说我的数据可能是个负数,我可能要存一个负五。也可能要存一个正五,那么当你的数据要存储正数或负数的时候,是不是也应该考虑我的这个类型能不能存储这种带符号的数
  • 那么,基于这样的两个原则,一个是范围,另一个是它的这个数据的正负这个角度。

基本数据类型

逻辑类型。只有两个量true和false,表示逻辑真值和逻辑假值。

整数类型。包括char, short, int和long。

浮点类型。包括float和double。

void类型。主要用于说明不返回值的函数或指向任一类型的指针等。

bool类型 需要引入<stdbool.h>头文件 _Bool基本类型
在这里插入图片描述

布尔实际上也是通过整型实现的

例如,

if ( -1 )

  x=12 ;

else

  x=18 ;

 上面0.5是非零数值,逻辑值为真,所以x赋给的是12,而不是18。

在<stdbool.h>头文件中, true就是1, false就是0==;bool是一个宏。没有加头文件的时候报错,也是因为这些宏是在这个头文件加的,所以需要引入这个头文件==, 代码中遇到true和false就需要引入头文件, 因为true和false的宏是在<stdbool.h>头文件中定义的

  • char类型
    在这里插入图片描述

在 C 语言中,字符和整数之间的关联是非常强的,字符常量事实上是 int 类型而不是 char 类型(这 是一个非常有趣的现象,但对我们并无影响)。当计算中出现字符时,C 语言只是使用它对应的整数值。

10000000 是一个8位二进制补码数,首位是1,因此它是一个负数的补码表示。
在二进制补码中,我们需要将每一位乘以对应的权重,并将所有位的结果相加,得到十进制的表示。

1 * (-2^7) = -128
0 * 2^6 = 0
0 * 2^5 = 0
0 * 2^4 = 0
0 * 2^3 = 0
0 * 2^2 = 0
0 * 2^1 = 0
0 * 2^0 = 0

将所有位的结果相加:

-128 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = -128
所以,10000000 对应的十进制数是 -128。

  • 使用char数据类型的变量需要特别注意,防止数据超出值域,思考下列几个语句:
  • 在 64 位操作系统中,long 数据类型通常占 8 字节(64 位),也就是 64 位二进制数。
  • 在 32 位操作系统中,long 数据类型通常占 4 字节(32 位),也就是 32 位二进制数。
 char   c1= 128;       //出错,数据越界(-128)
 char   c1= 129;       //出错,数据越界(-127)
 unsigned char  c2= -1;  //出错,数据越界(255)

在计算机中,字符型数据是用来表示字符的数据类型,不直接表示整数,但在内部存储时,字符型数据实际上被表示为整数。

计算机使用编码表,如ASCII(美国标准信息交换码)或Unicode,将字符映射为相应的整数值。在ASCII编码中,每个字符都与一个唯一的整数值(0到127)相关联,表示为一个8位的二进制数。

当在计算机中处理字符型数据时,实际上是在处理对应的整数值。对于有无符号的整数字符型数据,计算机并不直接知道该字符是有符号还是无符号,它只知道对应的整数值。在计算机内部,字符型数据的整数值不区分有符号和无符号,都以二进制形式存储。

当我们从程序中获取字符型数据并进行处理时,我们需要根据编码规则(如ASCII)将整数值解释为字符或相应的含义。对于字符型数据,通常由程序员来处理,根据具体的需求来解释字符的含义,并决定是否按照有符号或无符号来处理整数值。在C语言等编程语言中,我们可以通过声明字符型数据为char类型来处理字符型数据。根据C语言的规范,char类型既可以被视为有符号也可以被视为无符号,这取决于编译器的实现和计算机的体系结构。

总结来说,计算机内部对字符型数据实际上是以整数形式表示的,但是否有符号取决于具体的数据解释和计算机的体系结构。程序员在处理字符型数据时需要注意如何解释整数值,以确保正确地处理字符和相应的含义。

在实际使用中,为了避免混淆,最好在代码中明确指定char类型的有无符号性,或者使用更明确的整数类型(如int、unsigned char等),以确保正确地处理字符型数据。

  • •short类型<limits.h>

  • 在这里插入图片描述

  • int类型

  • 在这里插入图片描述

  • long类型在这里插入图片描述

4G的空间为4294967296字节

  • 浮点类型
  • 在这里插入图片描述

Tips:特别大的数或特别小的数简易用浮点型的指数形势。

  • 强制数据类型转换

  • 强制数据类型的转换是指采用某种方式将某种数据类型强制转换成指定的数据类型。包括显式的数据类型转换,和隐式的数据类型转换。

  • 例如,

    • int a=22, b=0 ;

    • float c = 24.87, d= 3.3;

    • b = (int) (a + c +d) ; // b为50

  • 强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来

  • 强制类型转换符是一种不安全的转换,一般都是将高级类型转换成低级类型,要丢失数据的精度;

  • 强制类型转换并不改变表达式中变量的数据类型和其值。

总结与思考

主要介绍了数据类型,包括分类、基本类型介绍、强制类型转换。

思考:

  • C语言中包括哪些数据类型?

答:整型、字符型、实型、枚举型、数组、结构体、共用体、指针类型、空类型

  • 如何做强制类型转换?
  • 答:在C语言中,可以使用强制类型转换符(类型名)来进行强制类型转换。强制类型转换的基本格式如下:
(目标数据类型) 表达式

其中,目标数据类型是希望将表达式转换成的数据类型,表达式是需要转换的数据。需要注意以下几点:

  1. 强制类型转换符是一对小括号,将目标数据类型放在括号内。

  2. 强制类型转换符后面的表达式如果存在复杂运算,应该用小括号括起来,以确保转换的顺序正确。

  3. 强制类型转换通常用于将高级类型转换成低级类型,可能会丢失数据的精度。因此,在进行强制类型转换时,应该谨慎考虑是否会导致数据精度丢失。

  4. 强制类型转换并不改变表达式中变量的数据类型和其值,只是在使用该表达式时按照目标数据类型进行解释。

以下是几个示例:

int a = 22, b = 0;
float c = 24.87, d = 3.3;
b = (int)(a + c + d); // b为50,将浮点数和整数相加后强制转换为整数类型

float pi = 3.14159;
int approximatePi = (int)pi; // approximatePi为3,将浮点数pi强制转换为整数类型

在进行强制类型转换时,需要根据实际情况仔细考虑数据类型的选择,以确保程序运行正确并得到预期的结果。

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

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

相关文章

Cilium系列-11-启用带宽管理器

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

P-DQN:离散-连续混合动作空间的独特算法

一、说明 本文首先说明DQN是个什么概念&#xff0c; DQN&#xff08;Deep Q-Network&#xff09;是一种基于深度学习的强化学习算法&#xff0c;在游戏AI中表现优异&#xff0c;如AlphaGo。然后说明人物动作预测的算法实现方法。 二、关于DQN的概念和实验 DQN&#xff08;Deep …

混合精度训练中的内存占用

结论&#xff1a; 在模型训练中&#xff0c;fp16会比fp32快很多&#xff0c;因此&#xff0c;一般会使用fp16的参数进行模型的前向和后向计算。然而&#xff0c;在进行梯度累加的时候&#xff0c;fp16往往会精度不够&#xff0c;无法满足计算需求。因此&#xff0c;会在反向计…

SOLIDWORKS等轴测剖切视图的创建技巧

在SOLIDWORKS工程图中&#xff0c;经常会用到等轴测剖切视图来显示零件或装配体的内部结构&#xff0c;下面介绍一下两种创建方式&#xff0c;供大家参考&#xff0c;以下图为例。 方法一 第一步&#xff0c;打开零件&#xff0c;创建一个切除拉伸的配置&#xff0c;该配置为 …

全网超细,Jenkins持续集成-自动化测试(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 执行集成构建 持…

计算机top命令

top 快捷键 1 核心参数 1 1 参考资料 [1]. https://blog.csdn.net/weixin_45465395/article/details/115728520 [2].https://www.cnblogs.com/liushui-sky/p/13224762.html

为了规避风险,如何给大模型打水印?

大型语言模型&#xff0c;如最近开发的ChatGPT&#xff0c;可以撰写文件、创建可执行代码和回答问题&#xff0c;通常具有人类般的能力。 随着这些大模型的应用越来越普遍&#xff0c;越来越大的风险也显现了出来&#xff0c;它们可能被用于恶意目的。这些恶意目的包括&#xf…

uni-app选择器( uni-data-picker)选择任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。引入插件后&#xff0c;发现做不到只选择年级&#xff0c;不选择班级&#xff08;似乎&#xff0c;只能到最后子节点了&#xff09;。 需求中&#xff0c;有可能选择的不是叶子。比如&a…

渣罐炉倾翻液压系统比例阀控制器

渣罐炉倾翻液压系统是一种用于渣罐炉倾翻的液压系统&#xff0c;由液压泵、油缸、阀组、油箱、管路等组成。 2. 启动液压泵&#xff0c;将液压油输送到油缸。 总之&#xff0c;渣罐炉倾翻液压系统具有操作简便、高效稳定等特点&#xff0c;适用于各种类型的渣罐炉倾翻。

SpringBoot+Vue开发笔记

参考&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?p1 ----------------------------------------------------------概要总结---------------------------------------------------------- 1、MVC架构&#xff1a; View&#xff1a;与用户交互 Controller&…

浅谈下API初步认知

当我们谈论API&#xff0c;我们指的是应用程序接口&#xff08;Application Programming Interface&#xff09;。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议&#xff0c;用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…

运动蓝牙耳机什么款式好、适合运动的蓝牙耳机推荐

夏天到了&#xff0c;越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上&#xff0c;除了常规的衣服、鞋之外&#xff0c;耳机也成为了当下年轻群体的必备项&#xff0c;尤其是在运动的过程中听听喜欢的音乐或者电台能够更好地放松身心。那…

Go init 顺序 使用建议

init函数的主要作用&#xff1a; 初始化不能采用初始化表达式初始化的变量。程序运行前的注册&#xff0c;例如初始化数据库链接。实现sync.Once功能。其他 init函数的主要特点&#xff1a; init函数先于main函数自动执行&#xff0c;不能被其他函数调用&#xff1b;init函数…

LeetCode每日一题Day3——1. 两数之和

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较

一、String与Int互转 在 Java 中要将 String 类型转化为 int 类型时&#xff0c;需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换。 String str "555555555"; int a Integer.parseInt(str); // 方式1 int b Integer.valueOf(str).intValu…

从虚拟到现实:数字孪生助力建筑创新

随着科技的不断进步&#xff0c;数字孪生技术正逐渐成为建筑行业的新宠。数字孪生是一种将实体世界与数字世界相结合的技术&#xff0c;通过将现实世界中的物体、系统或过程以数字化的方式进行建模和仿真&#xff0c;实现了真实世界与虚拟世界的互通。 在建筑行业中&#xff0c…

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代&#xff0c;我们每个人时刻都在生成、传递和应用数据&#xff0c;数据已经成为了现代社会中宝贵的资源之一&#xff0c;而在人工智能领域&#xff0c;数据更是被称为人工智能的“燃料”。 而在AI的发展中&#xff0c;只有拥有高质量、多样性且充分代表性的数据集…

Sqli-labs1~65关 通关详解 解题思路+解题步骤+解析

Sqli-labs 01关 (web517) 输入?id1 正常 输入?id1 报错 .0 输入?id1-- 正常判断是字符型注入&#xff0c;闭合方式是这里插一句。limit 100,1是从第100条数据开始&#xff0c;读取1条数据。limit 6是读取前6条数据。 ?id1 order by 3-- 正常判断回显位有三个。?id…

途乐证券|医药板块走高,神奇制药、双成药业涨停,科源制药等拉升

医药板块3日盘中震动走高&#xff0c;截至发稿&#xff0c;睿智医药涨超15%&#xff0c;景峰医药、神奇制药、双成药业等涨停&#xff0c;誉衡药业、科源制药涨约7%&#xff0c;精华制药、赛托生物涨约6%。 途乐证券指出&#xff0c;医药商场当前仍处于磨底行情&#xff0c;但行…

手机商城免费搭之java商城 电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…