C语言入门系列:数据类型之字面量类型

文章目录

  • 一,什么是字面量
  • 二,字面量为什么需要类型?
  • 三,变量类型和字面量类型的区别
    • 1,作用不同
    • 2,方式不同
  • 四,编译器如何推断字面量类型
    • 1,整数
    • 2,浮点数
    • 3,字面量后缀
      • 3.1 整形后缀
      • 3.2 无符号整数后缀
      • 3.3 浮点数后缀
      • 3.4 后缀总结

一,什么是字面量

字面量(literal)指的是代码里面直接出现的值。

int x = 123;

上面代码中,x是变量,123是字面量。

二,字面量为什么需要类型?

变量有类型不就够了吗?

为什么字面量也需要类型呢?

在这里插入图片描述
这两个问题涉及《编译原理》和《计算机组成原理》,这里简单的说一下,对于字面量的处理,编译器有两种方式:

  • ① 对于小型字面量,比如所有的数字类型的字面量,直接将字面量编译到机器指令中,运行时根据指令向变量内存填充数据。此时需要根据变量类型确定使用什么样的指令。
  • ② 对于大型字面量,比如对于字符串、大数组等较大的字面量,首先把数据存储到堆内存,程序运行时从指定的地址加载到栈中变量内存中。此时需要根据字面量的类型确定堆中分配的内存的大小。

三,变量类型和字面量类型的区别

1,作用不同

变量的类型规定了变量的行为和内存大小,编译器确定字面量的类型主要是为了确定指令类型或者内存大小。

2,方式不同

变量的类型是在编码时由程序员指定的,字面量类型是编译器根据字面量推断的。

四,编译器如何推断字面量类型

1,整数

一般情况下,十进制整数字面量(比如123)会被编译器指定为int类型。

如果一个数值比较大,超出了int能够表示的范围,编译器会将其指定为long int。

如果数值超过了long int,会被指定为unsigned long。如果还不够大,就指定为long long或unsigned long long。

2,浮点数

小数(比如3.14)会被指定为double类型。

3,字面量后缀

有时候,程序员希望为字面量指定一个不同的类型。

3.1 整形后缀

比如,编译器将一个整数字面量指定为int类型,但是程序员希望将其指定为long类型,这时可以为该字面量加上后缀l或L,编译器就知道要把这个字面量的类型指定为long。

int x = 123L;

上面代码中,字面量123有后缀L,编译器就会将其指定为long类型。这里123L写成123l,效果也是一样的,但是建议优先使用L,因为小写的l容易跟数字1混淆。

八进制和十六进制的值,也可以使用后缀l和L指定为 Long 类型,比如020L和0x20L。

int y = 0377L;
int z = 0x7fffL;

3.2 无符号整数后缀

如果希望指定为无符号整数unsigned int,可以使用后缀u或U。

int x = 123U;

L和U可以结合使用,表示unsigned long类型。L和U的大小写和组合顺序无所谓。

int x = 123LU;

3.3 浮点数后缀

对于浮点数,编译器默认指定为 double 类型,如果希望指定为其他类型,需要在小数后面添加后缀f(float)或l(long double)。

科学计数法也可以使用后缀。

1.2345e+10F
1.2345e+10L

3.4 后缀总结

字面量后缀涉及整数和浮点数,主要是因为这两种类型比较复杂,各自又可细分多种子类型。

常用的字面量后缀有下面这些。

  • f和F:float类型。
  • l和L:对于整数是long int类型,对于小数是long double类型。
  • ll和LL:Long Long 类型,比如3LL。
  • u和U:表示unsigned int,比如15U、0377U。
  • u还可以与其他整数后缀结合,放在前面或后面都可以,比如* 10UL、10ULL和10LLU都是合法的。
int           x = 1234;
long int      x = 1234L;
long long int x = 1234LLunsigned int           x = 1234U;
unsigned long int      x = 1234UL;
unsigned long long int x = 1234ULL;float x       = 3.14f;
double x      = 3.14;
long double x = 3.14L;

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

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

相关文章

YOLOv10改进 | 注意力篇 | YOLOv10引入iRMB

1. iRMB介绍 1.1 摘要:本文重点关注开发现代、高效、轻量级的模型来进行密集预测,同时权衡参数、FLOP 和性能。 反向残差块(IRB)作为轻量级 CNN 的基础设施,但基于注意力的研究尚未认识到对应的部分。 这项工作从统一的角度重新思考高效IRB和Transformer有效组件的轻量级…

渗透测试基础(四) MS08-067 漏洞攻击

1. 漏洞介绍 漏洞描述 Microsoft Windows Server服务RPC请求缓冲区溢出漏洞Windows的Server服务在处理特质RPC请求时存在缓冲区溢出漏洞,远程攻击者可以通过发送恶意的RPC请求触发这个溢出,导致完全入侵用户系统,以SYSTEM权限执行任意指令。…

太湖远大毛利率下滑:研发费用率远低同行,募投项目合理性疑点重重

《港湾商业观察》黄懿 6月20日,浙江太湖远大新材料股份有限公司(以下简称“太湖远大”,873743.NQ)即将迎来过会。 2023年11月30日,太湖远大所提交的上市申请材料正式获北交所受理,保荐机构为招商证券&…

功能测试 之 单模块测试----添加会员

1.需求分析 点击【添加会员】按钮后,页面跳转至添加会员详细页面。 说明: 会员昵称:必填,长度在20个字符(除去空格)以内,(会员昵称)可以重复;登录密码&#x…

关于IntelliJ IDEA 2024.1版本更新的问题

希望文章能给到你启发和灵感~ 感谢支持和关注~ 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、起因三、解决四、总结 序幕 近期,IntelliJ IDEA 推出了全新2024版本,相信很多编程的爱好者或者刚接触编程的小伙伴都会…

gorm简介

【1】ORM: 即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。 【2】GORM gorm是go语言的一个orm…

SpringBoot的冬奥会科普平台 LW +PPT+源码

3 平台分析 3.1 平台可行性分析 3.1.1 经济可行性 由于本平台是作为毕业设计平台,且平台本身存在一些技术层面的缺陷,并不能直接用于商业用途,只想要通过该平台的开发提高自身学术水平,不需要特定服务器等额外花费。所有创造及工…

【每日刷题】Day70

【每日刷题】Day70 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 922. 按奇偶排序数组 II - 力扣(LeetCode) 2. 905. 按奇偶排序数组 - 力扣&…

GeoServer安装启动

GeoServer 使用 servlet 容器(例如Apache Tomcat)打包为独立的 Java web 应用程序。以下说明专门针对 Tomcat。它可能不适用于其他容器应用程序。 在 Tomcat 上安装 导航到GeoServer 下载页面。从“已存档”中,选择最新的 2.18.x 版本的 GeoS…

Python12 列表推导式

1.什么是列表推导式 Python的列表推导式(list comprehension)是一种简洁的构建列表(list)的方法,它可以从一个现有的列表中根据某种指定的规则快速创建一个新列表。这种方法不仅代码更加简洁,执行效率也很…

iOS 17.6养老版发布,旧机必升?

iOS 17.6 的第一个开发者测试版已发布,另外还发布了macOS 14.6、watchOS 10.6、iPadOS 17.6 等。 苹果iOS系统更新一直是科技爱好者和用户关注的焦点,尤其是在iOS18的测试阶段,其吸引力尤为显著。尽管苹果同时推送了iOS17.6 Beta1&#xff0c…

kimi+的+能为论文写作+出什么?我帮你试过了!

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 Kimi是月之暗面科技有限公司开发的个性化智能助手功能。相比kimi,Kimi能够提供个性化定制服务,根据用户特定需求提供更专业深入的辅助,实现一对一的智…

多线程(总结黑马程序员)

一、什么是线程? 是一个程序内部的一条执行流程 多线程是什么? 多条线程由CPU负责调度执行 多线程的创建方式一:继承Thread类 //1.继承Thread类 public class MyThread extends Thread {//2.必须重写run方法Overridepublic void run() {…

【数据结构】【版本1.3】【线性时代】——栈

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、栈的概念二、栈的模拟实现2.1 定义2.2 初始化2.3 销毁2.4 压栈2.5 判空2.6 出栈2.7 获取栈顶元素2.8…

RAG优化技巧|7大挑战与解決方式|提高你的LLM能力

在当今快速发展的人工智能领域,大型语言模型(LLM)已经成为无处不在的技术,它们不仅改变了我们与机器交流的方式,还在各行各业中发挥着革命性的影响。 然而,尽管LLM RAG的能力已经让人惊叹,但我…

浅谈配置元件之JDBC连接配置

浅谈配置元件之JDBC连接配置 通过使用“JDBC连接配置”配置元件(JDBC Connection Configuration),您可以轻松地在JMeter测试计划中集成数据库交互能力。本指南将详细介绍如何设置和使用此配置元件来连接数据库并执行SQL查询。 1. 准备工作 …

微服务架构:解构现代应用程序的未来

目录 前言1. 微服务架构的基本概念1.1 什么是微服务架构1.2 微服务与单体架构的对比 2. 微服务架构的优势2.1 灵活性与可扩展性2.2 持续交付与部署2.3 技术多样性2.4 故障隔离 3. 微服务架构的挑战3.1 服务间通信和数据一致性3.2 运维复杂度3.3 安全性3.4 开发团队的协作 4. 微…

手机铃声下载2个必备技巧,定制化铃声,彰显个性魅力

手机铃声,就像是独特的信号灯,不仅仅是通知我们来电或信息的方式,更是展现个人品位和魅力的武器。手机铃声下载和定制,让你的手机从千万舰队中脱颖而出。在接下来的文章中,我们将详细探讨铃声下载技巧的具体操作步骤&a…

2024人工智能指数报告(二):技术性能

背景 从2017年开始,斯坦福大学人工智能研究所(HAI)每年都会发布一份人工智能的研究报告,人工智能指数报告(AII),对上一年人工智能相关的数据进行跟踪、整理、提炼并进行可视化。这份指数报告被认…

深度学习1 -- 开头

一 前言 感觉用这玩意越来越多,所以想学学。不过没想好怎么学,也没有提纲,买了两本书,一本是深度学习入门,小日子写的。还有一本就是花书。还有就是回Gatech参加线上课程,CS7643。 CS 7643: Deep Learnin…