首页 > 其他分享 >3.C基础_数据类型

3.C基础_数据类型

时间:2024-07-29 19:00:30浏览次数:18  
标签:字符 int 数据类型 基础 long 整型 double

数据类型概述

在计算机的内存中存放了很多的二进制数据,数据类型就是管理这些数据的含义。比如下面的内存数据,尽管内存中的数据是完全一样的,但数据类型不同,实际代表的数值含义也不同。

sizeof关键字

sizeof可以获取数据所占的空间的字节数,返回值为长整型long,单位为字节。

使用方法:

  • sizeof(变量、数据类型关键字)
  • sizeof 变量

各种数据类型

1、整型

整型数据有五种:char、short、int、long、long long 以及这五种对应的unsigned形式。

下面是整型的总汇表:

数据类型名称

所占空间 (字节)

占位符取值范围
char(signed char)

有符号字符

1%d-2^7-1~2^7
unsigned char无符号字符1%c0~2^8-1
short(signed short)有符号短整型2%d-2^15-1~2^15
unsigned short无符号短整型2%u0~2^16-1
int(signed int)有符号整型4%d-2^31-1~2^31
unsigned int无符号整型4%u0~2^32-1
long(signed long)有符号长整型4、8%ld...
unsigned long无符号长整型4、8%lu...
long long(signed long long)有符号长长整型8%ld-2^63-1~2^63
unsigned long long无符号长长整型8%lu0~2^64-1

long型的大小与计算机系统的位数有关。32位系统对应的是4字节、64位系统对应的是8字节

2、字符型

字符型数据也是一种整型,它对应的类型为unsigned char。0~255中的每一个数字对应一个字符,这个字符的规定可以在ASCII码表中查询得到。

在Linux中,可以使用" man ASCII "来查询ASCII码表:

ASCII码表的字符分类:

  • 通讯、控制类字符:00H~1FH,共32个,有些无法显示在屏幕上
  • 符号、数字、字母:20H~7FH,共96个,全部都可以显示在屏幕上
  • IBM制定的扩充字符:80H~FFH,共128个,这些是非标准的ASCII码

定义相关特点:

字符型实质是整型,对应的是ASCII码。因此下面的定义效果实际上是一样的:

char val = 'A'; //以字符赋值变量
char val = 65;  //以字符对应的ASCII码赋值变量

常用字符的ASCII码:

  • a~z:97~122
  • A~Z:65~90
  • 0~9:48~57
  • 空格:32
  • 换行符\n:10

常用字符转换方法:

  • 大写字母与小写字母转换:±32(97-65 = 32)
  • 整型数字与字符数字转换:±48(0的ASCII码为48)

3、浮点型(实型)

浮点型数据有三种:float、double、long double

下面是浮点型的总汇表:

数据类型名称所占空间 (字节)占位符精度(小数点后几位)
float单精度4%f6
double双精度8%lf15~16
long double长精度>=8与编译器有关%Lf>=15~16

3.1 浮点型的表示

浮点型可以用小数来表示,也可以使用科学计数法表示,具体定义如下:

float val = 0.08;//正常的小数表示
float val = 8e-2;//科学计数法 8*10^-2

3.2 浮点型的内存形式

浮点型的内存存放形式遵循IEEE 754标准,具体标准如下:

对于E,这个称为偏移的阶码、移码。float的偏移量为127,double的偏移量为1023

下面以9.625为例,手算float类型的内存形式,具体计算过程如下:

下面是辅助计算的网址及操作方法:

Base Convert: IEEE 754 Floating Point

3.3 浮点型的比较判断注意点

如果浮点型的小数部分的处理是循环的(就是第一步进制转换时,小数部分*2取整步骤一直乘不尽),那么float与double类型的值是不一致的,这个原因是因为在内存中的M部分保存的数值不一样,精度缺失也不一样。下面以2.2和2.25为例:

在代码中的体现如下:

  • float与double变量比较

  • float与常数比较(常数默认为double型,加上 f 变为float型)

因此浮点数的比较不能直接使用 == 进行比较,而是使用求差的方式进行比较,具体代码如下:

4、布尔型

布尔变量是一个逻辑值,下面是布尔变量的表:

数据类型名称所占空间(字节)占位符取值范围
_Bool布尔1%d0、1
  • 布尔类型只有0、1,非0数赋值给布尔变量会变为1,0赋值给布尔变量还是0。
  • 所占空间为1字节,用第0位来表示0、1,其余7位不使用。

在 " stdbool.h "中,定义了布尔类型的一些宏,具体如下:

#define bool _Bool /* _Bool是关键字,bool只是别名不是关键字 */
#define true 1
#define false 

下面用一个例子来验证布尔的运算,代码和运行结果如下:

5、缺省型void

void是缺省型,代表没有类型。通常用法如下:

  • 用于函数前,代表没有返回值
  • 用于指针类型void*,代表通用指针类型,可以指向任何类型的数据

数据类型转换

数据类型的转换有自动类型转换和强制类型转换,自动类型转换还包括赋值操作时的转换、二元运算时的转换,数据类型的转换框图如下:

1、自动类型转换

1.1 赋值操作

在赋值操作时,等号右边的变量类型会自动转变成等号左边的变量类型,当右边类型精度比左边类型精度大时,会产生损失精度的问题。

/* 赋值时,数据类型转换 */
int a;
a = 3.14;//a为int,3.14为double,赋值时3.14会转成int变成3,产生了精度损失 

1.2 二元运算

二元运算就是有两个参数的运算,如加、减、乘、除等。

二元运算时自动会向精度高的类型转换,转换路径如下:

简单的验证代码如下:

/* 二元运算时的数据类型转换 */
int a = 50;
double b = a*0.3;/* a为int,0.3为double. a会先转为double再与0.3相乘 */

2、强制类型转换

强制类型转换就是在变量前写上" (变量类型) ",即可将该变量的类型进行转换。

例如在除法中,需要保留精度,具体代码如下:

/* 未强制转换 */
int a = 100;
int b = 3;
printf("%.2lf",a/b);
//a,b都为int,运算之后为33.333舍弃小数部分,即33,精度损失

/* 进行强制转换 */
int a = 100;
int b = 3;
printf("%.2lf",(double)a/b);
//a被强转为double,运算时b会自动转为double,最终结果为double型33.33,精度不丢失

标签:字符,int,数据类型,基础,long,整型,double
From: https://blog.csdn.net/Fresh_man111/article/details/140762827

相关文章

  • web基础以及http协议
    ⼀、web基本概念和常识Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web服务是动态的、可交互的、跨平台的和图形化的。Web服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览服务,以及各种交互式服务,包括聊天、购物、学习等等内容。Web应⽤开发也经过了⼏代技术的不断......
  • 深度学习与图像识别day5(机器学习基础)
    线性问题主要处理回归问题,回归问题即预测一个连续问题的数值。计算决定系数(R-squared,也称为R²或系数决定)是衡量回归模型预测准确性的一个常用指标。R-squared值越接近1,表示模型的预测性能越好;如果R-squared值为0,则表示模型只是简单地预测了目标变量的平均值;如果R-squared值为负,......
  • Ansible基础
    Ansible是一个开源的基于openssh的自动化配置管理工具。可以用它来配置系统,部署软件和编排更高级的IT任务,比如持续部署或零停机更新。Ansible的主要目标是简单和易用,通过Ansible可以批量管理大型运维环境。Ansible是一个用Python开发的自动化运维工具,它能执行批量系统配置、......
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
    前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!→点击获取网络安全资料·攻略←一、自学网络安全学习的误区和陷阱1.不要......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
    学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.基......
  • 前端必备基础【网络通信】(2024最新版)
    AjaxAsynchronousJavascriptandXML的缩写,是使用JS发起网络通信的技术统称,具体步骤为:创建XMLHttpRequest实例发出HTTP请求接收服务器传回的数据更新网页数据(通常是部分内容,而不是整个网页)XMLHttpRequestXMLHttpRequest是js的内置对象,用于发起网络请求g......
  • Amazon Bedrock 模型微调实践(一):微调基础篇
    本博客内容翻译自作者于2024年7月在亚马逊云科技开发者社区发表的同名博客:“MasteringAmazonBedrockCustomModelsFine-tuning(Part1):GettingstartedwithFine-tuning”:https://community.aws/content/2jNtByVshH7vnT20HEdPuMArTJL?trk=cndc-detail亚马逊云科技......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-19 读写I2C接口EEPROM实验
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述前面的课程中,我们......
  • FPGA知识基础之---呼吸灯实验
    目录一、呼吸灯简介1.定义2.特点3.工作原理PWM(脉冲宽度调制)二、实验任务三、PVM(PulseWidthModulation)简介3.1工作原理3.2优点3.3应用领域四、程序设计1、思路整理2、系统框图3、波形图4、呼吸原理五、RTL代码六、仿真分析6.1Testbench代码6.2Modelsim仿真波形......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-20 读写I2C接口的RTC时钟芯片
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述    本节课继续利用I......