C语言--01基础数据类型

news2024/9/22 4:04:23

1.整型

  • 概念:表达整数类型的数据
  • 语法:
int a = 123; // 定义了一个专门用来存储整数的变量a 
a = 456 ;

  • 需要注意的地方:
  1. int 的本意是 integer,即整数的意思
  2. int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量(他的值可以被改变)。
  3. 变量 a 所占内存大小,在不同的系统中是不一样的,64位 、 32位 系统典型的大小是4个字节
  4. 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
  • int Max = 50 ;
  • 整型修饰符
    • short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型, (32位、64位)它会使得整形变为原本的一半
    • long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型,(64位)它会使得整形从原本的4字节增加到8字节。
    • long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型 (32位)系统中使得整型从4字节提升位8字节。
    • unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数
short int a; // 短整型  32 、 64 位系统中 尺寸为 2字节
long int b;  // 长整型  32位系统中尺寸位 4字节   64位系统中尺寸位 8字节
long long int c; // 长长整型  32位系统中尺寸位 8字节   64位系统中尺寸位 8字节

unsigned int e;  // 无符号整型  所占的内存大小不变,只不过不需要描述正负符号,因此他只能表达正整数

unsigned short int f; // 无符号短整型
unsigned long int g;  // 无符号长整型
unsigned long long int h; // 无符号长长整型
  • 使用整型修饰符后,关键字 int 可以被省略:
    • 这些修饰符默认用于修饰整型类型,因此省略后它依然表示一种整型
short a; // 短整型
long b;  // 长整型
long long c; // 长长整型

unsigned e;  // 无符号整型

unsigned short f; // 无符号短整型
unsigned long g;  // 无符号长整型
unsigned long long h; // 无符号长长整型
  • 符号位:
    • 符号位位于整数类型的二进制位中最高的一位
    • 有符号的整型数据,首位(最高位)为符号位,0表示正数,1表示负数。
    • 无符号的整形数据,没有符号位。
  • 溢出:
    • 超过数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的

  • 编码形式:
    • 原码:正数直接使用二进制来表达,比如a=100,在内存中是 00…001100100
    • 补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11…1111111101
      • 补码 = 源码 --> 取反 --> 加1

    • 注意负数的补码在取反加一的时候,符号位是不动的
  • 进制:源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是二进制
    • 十进制(默认),比如1099
    • 八进制,比如013 , 八进制的前缀就是 0
    • 十六进制,比如0x6FF0A , 十六进制的前缀是 0x 或 0X
  • 格式控制符
    • int 整型:%d
    • int 整型:%u 以无符号为解析规则
    • short 整型:%hd, h代表half,即一半的存储字节
    • long 整型:%ld
    • long long 整型:%lld
    • 显示不同进制的前缀: %#o、 %#x

2.浮点型(实型)

  • 概念:用来表达实数的数据类型
  • 分类:
    • 单精度浮点型(float),典型尺寸是4字节
    • 双精度浮点型(double),典型尺寸是8字节
    • 长双精度浮点型(long double),典型尺寸是16字节
    • 占用内存越多,能表达的精度越高
float f1; // 单精度
double f2; // 双精度
long double f3; // 长双精度

3.字符

实际上是一个单字节的整型,能参与任何整型可以参与的运算和操作。

char ch1 = 'a';  // 'a'是字符常量,代表字母a
char ch2 = '\n'; // '\n'是不可见字符常量,代表回车

计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。

字符本质上就是一个单字节的整型,支持整型所有的运算。比如:

char c1 = 20;
char c2 = c1 + 'a'; // 等价于 char c2 = 20 + 97;

printf("%c\n", c2); // 以字符形式输出117,即 'u'
printf("%d\n", c2); // 以整型形式输出117

4.字符串

  • 定义
// 字符串的定义方式有两种:指针和数组
char *s1 = "abcd"; // 使用字符指针来表示字符串  (使用指针s1来【指向】字符串"abcd"的地址)
char s2[]= "abcd"; // 使用字符数组来表示字符串   (使用一个数组s2来【存放】了"abcd"这些字符数据)

// 注意,使用数组来定义字符串时,方括号[]里面的数字可以省略
// 不省略也可以,但必须必字符串实际占用的内存字节数要大,比如:
char s3[] = "apple";
char s4[5] = "apple";  // "apple" 隐藏了一个结束符'\0'  因此该数组为 字符数组
char s5[6] = "apple";  // 正确写法必须大于等于6 
  • 在内存中的存储
    • 在内存中实际上是多个连续字符的组合
    • 任何字符串都以一个 ‘\0’ 作为结束标记,例如:“funny story” 的内存如下

数组表示字符串是把字符串常量直接复制一份过来,可访问可修改

指针是指向字符串的地址,因为是字符串常量,所以只可访问不可修改

5.布尔型数据

  • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
  • 语法:
bool a = 1; // true  逻辑真,此处1可以取其他任何非零数值
bool b = 0; // false 逻辑假 
  • 注意:
  1. 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
  2. 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
  • 布尔型数据常用于逻辑判断、函数的返回值、循环控制等场合。

6.常量与变量

  • 概念:不可改变的内存称为常量,可以改变的内存称为变量
  • 举例:
int a = 100;    // a是变量,而100是常量
float f = 3.14; // f是变量,而3.14是常量
char s[] = "abcd"; // s是变量,"abcd"是常量
  • 常量的类型

常量举例

说明

类型

100

整型

int

100L

长整型

long

100LL

长长整型

long long

100ULL

无符号长长整型

unsigned long long

3.14

双精度浮点型

double

3.14L

长双精度浮点型

long double

‘a’

字符型

char

“abcd”

字符指针(字符串\表示该字符串的入口地址)

char *

7.类型转换

  • 概念:不一致但相互兼容的数据类型,在同一表达式中将会发生类型转换。
  • 转换模式:
    • 隐式(被动的、默认的)转换:系统按照隐式规则(尽量提高精度、不丢失精度)自动进行的转换
    • 强制(主动的)转换:用户显式自定义进行的转换
  • 隐式规则:从小类型向大类型转换,目的是保证不丢失表达式中数据的精度(从低精度往高精度转换)

  • 隐式转换示例代码
char  a = 'a';
int   b = 12;
float c = 3.14;
float x = a + b - c; // 在该表达式中将发生【隐式转换】,所有操作数被提升为 【float】
  • 强制转换:用户强行将某类型的数据转换为另一种类型,此过程可能丢失精度
char  a = 'a';
int   b = 12;
float c = 3.14;
float x = a + b - (int)c; // 在该表达式中a隐式自动转换为int,c被强制转为int

注意:

在同一表达式中如果出现了无符号整型与有符号整型,那么系统会默认转换为无符号整型,因此对于负数来说被转换为无符号后他的值是非常大的(因为最高位如果为一的话该值必定大于21亿多...)

int Num1 = 123 ;
unsigned Num2 = -1 ;

if (Num1 > Num2)
{
    printf("%d>%d\n" , Num1 , Num2);
}
else{
    printf("%d>%d\n" , Num2 , Num1);
}

//输出:-1>123.因为在表达式中同时出现了无符号整型和有符号整型,有符号整型默认转换为了有符号整型,
//所以-1的符号位转换为了正值,最高位为1,值达到了21亿多

8.数据类型的本质

  • 概念:各种不同的数据类型,本质上是用户与系统对某一块内存数据的解释方式的约定。
    • 17620828909
  • 推论:
    • 类型转换,实际上是对先前定义时候的约定,做了一个临时的打破。
    • 理论上,可以对任意的数据做任意的类型转换,但转换之后的数据解释不一定有意义。

9.整型数据尺寸

  • 概念:整型数据尺寸是指某种整型数据所占用内存空间的大小
  • C语言标准并未规定整型数据的具体大小,只规定了相互之间的 “ 相对大小 ” ,比如:
    • short 不可比 int 长
    • int 不可以比long 长
    • long 不可比 int 短
    • long 型数据长度等于系统字长
  • 系统字长:CPU 一次处理的数据长度,称为字长。比如32位系统、64位系统。
$ getconf LONG_BIT 64
  • 典型尺寸:
    • char 占用1个字节
    • short 占用2个字节
    • int 在16位系统中占用2个字节,在32位和64位系统中一般都占用4个字节
    • long 的尺寸等于系统字长
    • long long 在32位系统中一般占用8个字节,在64位系统中一般占用8个字节
  • 存在问题:
    • 同样的代码,放在不同的系统中,可能会由于数据尺寸发生变化而无法正常运行。
    • 因此,系统标准整型数据类型,是不可移植的(不具备可移植性),这个问题在底层代码中尤为突出。

10.可移植性整型

  • 概念:不管放到什么系统,尺寸保持不变的整型数据,称为可移植性整型
  • 关键:typedef
    • typedef 关键字是 C 和 C++ 语言中用于定义类型别名的关键字。类型别名可以让程序员更方便地使用现有的类型,而不需要每次都输入完整的类型名称。

类型别名可以用于任何有效的类型,包括基本数据类型、结构体、类、枚举等。类型别名可以用于定义变量、函数参数、函数返回值等。使用类型别名可以提高代码的可读性和可维护性、可移植性,特别是在定义复杂的数据结构时。

typedef int int32_t; // 将类型 int 取个别名,称为 int32_t
typedef long int64_t;// 将类型 long 取个别名,称为 int64_t
  • 思路:
    1. 为所有的系统提供一组固定的、能反应数据尺寸的、统一的可移植性整型名称
    2. 在不同的系统中,为这些可移植性整型提供对应的 typedef 语句

系统中已经有头文件对可移植数据类型进行取别名操作:

/usr/include/x86_64-linux-gnu/bits/types.h

...
...
....
/* Fixed-size types, underlying types depend on word size and compiler.  */
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
#if __WORDSIZE == 64    // 条件编译  判断当前__WORDSIZE(系统的位数)
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
#else
__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;
#endif

...
....
....

结语:

        在这篇博客中,我们深入探讨了C语言中的基本数据类型,包括整型、浮点型、字符型以及它们的修饰符。通过对每种数据类型的特点和应用场景的理解,我们可以更有效地选择合适的数据类型,以优化程序的性能和内存使用。

        掌握数据类型对于编写高效、可靠的C语言程序至关重要。同时,了解它们的特性也能帮助我们避免常见的错误,如溢出、精度丢失等,进而提高我们的编程能力。

        希望这篇博客能为您的C语言学习之旅提供有价值的指导。数据类型是编程的基石,未来的编程之路请继续深入探索,实践和运用这些知识!

感谢您的阅读,期待在后续的文章中与您分享更多C语言的精彩内容!

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

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

相关文章

Kafka快速入门:Kafka驱动JavaApi的使用

生产者和消费者是Kafka的核心概念之一,它们在客户端被创建和使用,并且包含了许多与Kafka性能和机制相关的配置。虽然Kafka提供的命令行工具能够执行许多基本操作,但它无法实现所有可能的性能优化。相比之下,使用Java API可以充分利…

谁有实际开发权限?

需要查一下,谁有实际开发权限。 正常来说,是按权限查,但是,有权限,不见得能开发,谁开发都得要个sap key。 那切入点就是这个key了,毕竟是问谁有实际开发权限。 直接给结果: 好啦&…

通过POJO生成MySQL的DDL语句

背景 有时候下载的源码没有数据库的DDL语句&#xff0c;需要手动去创建&#xff0c;这就很麻烦了&#xff0c;这时需要一个利器通过POJO对象生成DDL语句&#xff0c;一键生成&#xff0c;直接执行即可。 工程结构示例 pom.xml文件 <?xml version"1.0" encodin…

如何在 Git 中安全撤销提交与更改

文章目录 前言一、Git Reset1. --soft&#xff1a;保留变更在暂存区2. --mixed&#xff08;默认选项&#xff09;&#xff1a;保留变更在工作区3. --hard&#xff1a;彻底丢弃所有变更 二、Git Revert1. 撤销单个提交2. 撤销多个提交3. 撤销合并提交 三、实际例子总结 前言 在…

你知道手机零部件尺寸检测的重要性吗?

手机零部件作为手机制造行业的基础&#xff0c;其品质的优劣直接关系到行业的发展&#xff0c;所以加强手机精密零部件尺寸检测非常重要。如今&#xff0c;手机零部件变得更加精细&#xff0c;对质量的要求也在不断提高&#xff0c;随着生产规模逐渐扩大&#xff0c;传统的检测…

java ssl使用自定义证书

1.证书错误 Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 2.生成客户端证书 openssl x509 -in <(openssl s_client -connect 192.168.11.19:8101 -prexit 2>/dev/null) -ou…

C语言 | Leetcode C语言题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; typedef struct {int tweetId;int userId; } Tweet;typedef struct {int* dict[501];Tweet* tweetList;int tweetListLen; } Twitter;Twitter* twitterCreate() {Twitter* obj malloc(sizeof(Twitter));for (int i 0; i < 501; i) {ob…

【Linux】 gdb-调试器初入门(简单版使用)

&#x1f525;系列文章&#xff1a;《Linux入门》 目录 一、背景 二、什么是GDB &#x1f337;定义 &#x1f337;GDB调试工具---提供的帮助 三、GDB的安装教程-Ubuntu &#x1f337;gdb的安装 四、哪类程序可被调试 &#x1f337;程序的发布方式 &#x1f337;Debug版…

力扣 | 背包dp | 279. 完全平方数、518. 零钱兑换 II、474. 一和零、377. 组合总和 Ⅳ

文章目录 一、279. 完全平方数二、518. 零钱兑换 II三、474. 一和零四、377. 组合总和 Ⅳ 一、279. 完全平方数 LeetCode&#xff1a;279. 完全平方数 朴素想法&#xff1a; 这个题目最简单的想法是&#xff0c;可以用 O ( n n ) O(n\sqrt{}n) O(n ​n)的动态规划解决&#x…

OpenCV几何图像变换(1)映射转换函数convertMaps()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像变换映射从一种表示形式转换为另一种表示形式。 该函数将用于 remap 的映射对从一种表示形式转换为另一种表示形式。以下选项 ((map1.type…

车辆类型检测算法、车辆类型源码及其样本与模型解析

车辆类型检测算法是利用计算机视觉和深度学习技术&#xff0c;对车辆图像进行自动分析和识别&#xff0c;以判断车辆的类型&#xff08;如轿车、SUV、货车等&#xff09;的一种算法。以下是对车辆类型检测算法的详细解析&#xff1a; 一、算法基础 车辆类型检测算法的基础是图…

区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM

区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM 文章目录 前言区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM 一、QRLSTM模型1. 基本原理1.1 LSTM (Long Short-Term Memory)1.2 量化回归&#xff08;Quantile …

移动端GenAI应用的崛起:从市场规模到成功案例分析

随着生成式人工智能&#xff08;GenAI&#xff09;技术的飞速发展&#xff0c;移动应用市场正经历一场前所未有的变革。从图像编辑到聊天机器人&#xff0c;这些基于AI的应用不仅满足了用户日益增长的需求&#xff0c;也为企业带来了巨大的商业机遇。本文将探讨这一领域的最新趋…

网站建设中:高效利用Robots.txt文件的策略与实践

原文&#xff1a;网站建设中&#xff1a;高效利用Robots.txt文件的策略与实践 - 孔乙己大叔 (rebootvip.com) 在网站中使用robots.txt文件是一种控制搜索引擎爬虫访问网站内容的方法。以下是关于如何在网站中使用robots.txt的详细步骤和注意事项&#xff1a; 一、创建robots.t…

集团数字化转型方案(四)

集团数字化转型方案通过全面部署人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;技术&#xff0c;创建了一个智能化的企业运营平台&#xff0c;涵盖从业务流程自动化、实时数据监控、精准决策支持&#xff0c;到个性化客户服务和高…

PV、UV、IP:网站流量分析的关键指标

原文&#xff1a;PV、UV、IP&#xff1a;网站流量分析的关键指标 - 孔乙己大叔 (rebootvip.com) 摘要&#xff1a; 在浩瀚的互联网海洋中&#xff0c;PV&#xff08;Page View&#xff0c;页面浏览量&#xff09;、UV&#xff08;Unique Visitor&#xff0c;独立访客数…

Eclipse SVN 插件在线下载地址

Eclipse SVN 插件 Subversive 在线安装 1、选择help下的install new software 2、点击 add 3、Name随便写&#xff0c;Location输入&#xff1a; https://download.eclipse.org/technology/subversive/4.8/release/latest/ 点击Add 4、然后一直下一步&#xff0c;Finish&am…

【QT】——1_QT学习笔记

一、QT是什么&#xff1f; QT 是一个功能强大、应用广泛的跨平台 C 应用程序开发框架&#xff0c;它不仅提供了丰富多样、美观实用的图形界面组件&#xff0c;还具备高效灵活的信号与槽通信机制&#xff0c;能够帮助开发者轻松构建出复杂且性能优越的应用程序&#xff0c;广泛…

VS Code中基于MSTest编写和运行测试

MS Test&#xff08;Microsoft Test Framework&#xff09;是微软提供的一个用于.NET应用程序的单元测试框架。以下是一个使用MS Test进行单元测试的示例&#xff0c;该示例将涵盖测试的基本步骤和概念。 项目搭建 在VS Code中开发C#时&#xff0c;创建solution&#xff08;解…

AI绘画Stable Diffusion画全身图总是人脸扭曲?ADetailer插件实现一键解决!商业级AI人物生成教程

大家好&#xff0c;我是灵魂画师向阳 你是否遇到过SD生成的人物脸部扭曲、甚至令人恶心的情况&#xff1f;也曾感到束手无策&#xff1f;别担心&#xff0c;这份教程专为你而来。 在使用SD生成人物全身照时&#xff0c;你可能经常发现人物的脸部会出现扭曲问题。这是因为人物…