当前位置: 首页 > news >正文

入门-C编程基础部分:4、数据类型

飞书文档https://x509p6c8to.feishu.cn/wiki/PlQUw29twilDDRkeBfHcqbIwnLg

数据类型的作用:

根据业务需要,存储不同的数据类型

#include <stdio.h>int main(){//1-200kgunsigned char weight = 60;//idunsigned long id = 202502301;float height = 1.9f;printf("weight = %d kg\n",weight);printf("id = %ld \n",id);printf("height = %0.1f \n",height);return 0;
}

整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型存储大小值范围
char1 字节-128 到 127 或 0 到 255
unsigned char1 字节0 到 255
int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295
short2 字节-32,768 到 32,767
unsigned short2 字节0 到 65,535
long4 字节-2,147,483,648 到 2,147,483,647
unsigned long4 字节0 到 4,294,967,295

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

以下列出了32位系统与64位系统的存储大小的差别(windows 相同):

为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:

#include <stdio.h>int main()
{int intsize = sizeof(int);printf("int 存储大小 : %d \n", intsize);return 0;
}

最终打印为:

int 存储大小 : 4

出现中文乱码,可以修改文件编码为GBK,点击vscode右下角,修改UTF8为GBK

如果希望不仅对本文件生效,可以点击File->Preferences->settings,输入encoding,修改utf-8为GBK

整数类型示例

#include <stdio.h>int main()
{char a = -10;unsigned char b = 10;short c = 32760;unsigned short d = 65534;printf("a  : %d \n", a);printf("b  : %d \n", b);printf("c  : %d \n", c);printf("d  : %d \n", d);return 0;
}

浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

类型存储大小值范围精度
float4个字节(32位)-3.40E+38~3.4E+386 位有效位
double8个字节(64位)-1.79E+308~-1.79E+30815 位有效位

Double和Float都是浮点数类型,但是Double的精度比Float更高。

如果需要进行高精度计算,或者需要表示非常大或非常小的数,建议使用Double类型。而如果需要节省内存空间,或者对精度要求不高,则可以使用Float类型。

数值范围说明:

float和double的范围是由指数的位数来决定的。float的指数位有8位,double的指数位有11位,如下:

float

1bit(符号位)

8bit(指数位)

23bit(尾数位)

double

1bit(符号位)

11bit(指数位)

52bit(尾数位)

于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。

其中负指数决定了浮点数所能表达的绝对值最小的非零数,而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;

double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

科学计数法的说明:

3.4E+38是科学计数法的表示方式.
例如:

1.2E+2:可以理解为小数点向右移动2位,1.2E+2 =120
1.2E-2:可以理解为小数点向左移动2位,1.2E-2 = 0.012

精度说明

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

为什么说绝对能保证的为6位,这是因为精度与舍入误差造成的:
尽管 float 可以表示最多 7 位有效数字,但在实际应用中,由于浮点数的二进制表示和十进制之间的转换存在舍入误差,导致某些情况下无法准确表示所有 7 位有效数字。具体原因如下:
二进制到十进制的转换
许多十进制小数在二进制中是无限循环的,例如 0.1 在二进制中是无限循环小数。因此,在存储时会进行截断或舍入,引入误差。
舍入规则
浮点数的计算和存储过程中,会使用不同的舍入规则(如四舍五入、截断等)。这些规则可能导致某些情况下丢失精度。
有效数字的定义
在计算机科学中,"有效数字"是指能够可靠表示的数字位数。对于 float 类型,虽然理论上可以表示 7 位有效数字,但为了确保所有情况下都能正确表示,通常只保证 6 位有效数字。

有效位说明:

6位有效位,注意不是小数的位数,是以第一个非0数字开始数6位
比如:
12345.6789,6位精度位指的是12345.6
0.00012456789,6位精度位指的是123456

以下是一些示例:

如果您需要存储一个小数点后只有一位的数字,例如温度计度数,您可以使用float类型。例如,您可以使用以下代码声明一个float类型的变量:
float temperature = 25.5f;
如果您需要存储一个小数点后有多位数字的数字,例如圆周率,您应该使用double类型。例如,您可以使用以下代码声明一个double类型的变量:
double pi = 3.14159265359;

例程:

#include <stdio.h>int main()
{float a = 123.12f; //初始化float时,需要在数值后添加f,否则会被默认初始化位doubledouble b = 0.12345678912345678;printf("float  : %.2f \n", a);printf("double  : %.20f \n", b);return 0;
}

它会产生下列结果:

float  : 123.12
double  : 0.12345678912345678000

void 类型

void 类型指定没有可用的值。它通常用于以下两种情况下:

序号类型与描述
1函数返回为空
C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
2函数参数为空
C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);

关于printf打印的占位符参考:

【C语言】 全面解析占位符-CSDN博客

相关文章:

  • 【力扣】day1
  • 第十一章 网络编程
  • 【设计模式】适配器模式:让不兼容的接口和谐共处
  • java开发中的设计模式之工厂模式
  • 设计模式:命令模式-解耦请求与执行的完美方案
  • DB-GPT 最新0.7.0版本Windows 部署
  • Differentiable Micro-Mesh Construction 论文阅读
  • 龙虎榜——20250415
  • centos时间不正确解决
  • GPTNet如何革新创意与效率
  • 本地实现Rtsp视频流推送
  • 树莓派学习专题<5>:使用V4L2驱动获取摄像头数据--概览
  • 多模态大模型MLLM基础训练范式 Pre-train + Instruction FineTuning
  • GPT-4o Image Generation Capabilities: An Empirical Study
  • [区块链] 持久化运行区块链 | 并通过HTTP访问
  • Visio绘图工具全面科普:解锁专业图表绘制新境界[特殊字符]
  • 安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
  • 3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?
  • vue3中的新特性
  • SpringMVC 执行流程
  • 中国太保一季度净赚96.27亿元降18.1%,营收同比下降1.8%
  • 外交部:美国是国际军控与防扩散体系的最大破坏者
  • “今日海上”对话“今日维也纳”,东西方艺术在上海碰撞
  • 朱守科任西藏自治区政府副主席、公安厅厅长
  • 政企研合力,科学监测分析服务消费
  • 安徽铁塔再通报“会议室不雅行为”事件:涉事员工停职检查