C语言中的常量

news2024/11/21 1:27:00

整型常量

常量是指在程序运行期间其数值不发生变化的数据。整型常量通常简称为整数。

整数可以是十进制数、八进制数和十六进制数。例如,十进制的数值3356可以有下列二种不同的表示形式:

  • 八进制数 06434
  • 十六进制数 0xd1c

Tip:当我们判断十六进制或八进制的时候可以把每位数转化为四位二进制(十六进制)/三位二进制(八进制)数的形式, 然后把这个二进制数与常量取值的最大二进制位数进行比较, 这样做的目的是为了更直观的判断

浮点常量

浮点常量又称为实数,一般含有小数部分。

在C语言中,实数只有十进制的实数,分为单精度和双精度。实数有两种表示方法, 即一般形式和指数形式。

一般形式的实数基本形式如下:

  • 例如, 3.5 , -12.5, 3.1415926
    在这里插入图片描述

指数常量

指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。 当一个实数的符号为正号时,可以省略不写,其表示的一般形式如下:

  • 1.176e+10 表示 1.176×1010
  • 3.5789e-8 表示 -3.5789×10-8
  • 通常表示特别大或特别小的数
    在这里插入图片描述

字符常量

字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。

e.g. ’A‘, ‘a’, ‘Q’, ‘0’, ‘9’, ‘+’, ‘:’, ‘?’, ‘$’ 都是字符常量。

在C语言中, 字符常量具有数值。字符常量的值就是该字符的ASCII码值。

可以把字符常量看做一个字节的正整数。

例如,char a, b, u, v

a = ‘F’ ; // 将70送给a

b = ‘A’+2; // b存放的是 ‘C’ 字符

u = ’ ’ + ‘B’; // u存放的是 ‘b’ 字符

v= ‘b’ - 32; // v存放的是 ‘B’ 字符

它们分别相当于下列运算;

a= 70;

b= 65+2;

u= 32+66 ;

v= 97-32;

小写字母和大写字母之间的ASCII值之间差32也就是一个空格对应的ASCII值

Waring

字符0和整数0, 虽然它们打印出来没有差别, 但它们不是同一个概念
在这里插入图片描述

code

在这里插入图片描述

result:
在这里插入图片描述

当编译器看到字符0的时候, 它会认为这是整数48

Question:如果想把输入的字符0变成真正意义上的0而不是数字48, 如何转化呢?
整数0 = ‘0’ - 48

整数0-9和字符0-9之间差48

字符串常量

所谓字符串常量是指用双引号括起来的一串字符来表示的数据。(字符串以\0结尾) “9”—‘9’,’\0’

字符串常量要么借用一个指针指向字符串常量, 要么建一个数组来存储一个字符串常量

下面给出几个字符串常量的例子:

  • “Hello!”, “StudentS”, “9”, “LINUX", “李四”

  • “北京海淀成府路号", “姓名:”, “*@163.com", “”

字符串常量在C语言中以字符数组的形式存在,例如 “abc” 实际上会被编译器存储为一个以字符 ‘a’、‘b’、‘c’ 和 ‘\0’(表示字符串结束的空字符)结尾的字符数组。当使用指针来指向字符串常量时,它实际上指向了该字符数组的首地址。
只包含一个字符的字面串(字符串)不同于字符常量(字符)。字面串"a"是用指针来表示的,这个指针指向 存放字符"a"(后面紧跟空字符)的内存单元。字符常量’a’是用整数(字符集的数值码)来表 示的。

标识常量

所谓标识常量是指用标识符代替常量使用的一种常量, 其名称通常是一个标识符。

标识常量也叫符号常量,一般用大写英文字母的标识符。

在使用之前必须预先定义。说明形式为:

#define <标识常量名称> <常量>

例如

#define MAX 50

#define PI 3.1415926

#define NULL 0

#define EOF -1

#define ERROR -1

  • 其中,MAX、PI、NULL、 EOF和ERROR都是标识常量, 它们代替的常量分别是50、3.1415926、0 、-1和-1 。

  • 一般情况,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。

  • 定义一个宏名字之后,可以在其他宏定义中使用,例如:

    #define ONE 1

    #define TWO ONE+ONE

    #define THREE ONE+TWO
    注意宏是原样替换!!!
    比如下面这个例子
    在这里插入图片描述

    大部分人第一次见到它可能会这样想
    1 + (1 + 1)\*20 + 10 == 51, 但这是错的, 与我们常规的思维不同, 正确的方法应该是这样的
    1 + 1 + 1*20 + 10 == 32
    在这里插入图片描述

  • 所以此处应当注意, 宏是替换不是运算, 这是一个陷阱, 一般人很容易把它算出来如果真的想把它算出来我们该如何做?

    • 现在我们随机的更改源代码,在这里我们更改了第3行代码把原来的1改为了1 + 1,当然也可以更改为(1 + 1) , 更改此处的目的是为了使预处理后的效果更直观一点
    • 在这里插入图片描述

    然后我们再使用gcc编译器生成预处理后的源代码

    1. 首先输入gcc -E ..., 这里-o define.i 代表生成的文件的名称, -E代表预处理源代码
      在这里插入图片描述

    2. 然后使用vi define.i打开并查看预处理后的文件, 然后在命令行模式下输入G(大写 )可以快速的将光标移到末尾, 可以看到预处理后的代码,宏只是进行替换并没有进行运算, 这也进一步得出了宏只进行简单的替换, 并没有其他的操作这一结论, 所以宏的注意事项大家也应该明白了, 在这里一定要注意它的运算规则, 就是原样展开, 当然有想法的话在定义的时候该加括弧加括弧, 可以避免一些问题

    3. 在这里插入图片描述

  • 如果一个串长于一行,可在行尾用反斜线”\”续行

    #define LONG_STRING “This is a very very long \

    String that is used as an example”

总结与思考

主要讲解了基本数据的常量、标识常量。

思考:

  • 字符常量和字符串常量的区别是什么?
    答:1. 字符常量和字符串常量的区别:

    • 字符常量是单个字符,用单引号括起来,例如:‘A’,‘b’,‘1’,'@'等。
    • 字符串常量是由多个字符组成的字符序列,用双引号括起来,例如:“Hello”,“C programming”,"12345"等。

    示例:

    char c = 'A';           // 这是字符常量
    char str[] = "Hello";   // 这是字符串常量
    

    注意:字符常量在内存中以整数形式表示字符的ASCII码值,而字符串常量是以字符数组的形式存储在内存中,以空字符 ‘\0’ 结束。

  • 浮点常量有几种表式形式?
    答:浮点常量有两种表示形式:

    • 十进制形式:由数字和小数点组成,可以带有指数部分,例如:3.14,0.123,2.5e-3(表示2.5乘以10的负3次方)等。
    • 十六进制形式:以0x或0X开头,后面跟着十六进制数字和小数点,例如:0x1.2p3(表示1.2乘以2的3次方)。

    示例:

    float num1 = 3.14;        // 十进制形式的浮点常量
    float num2 = 0x1.2p3;     // 十六进制形式的浮点常量
    

    注意:浮点常量可以用于表示带小数点的实数值,而且可以使用指数形式表示非常大或非常小的数值,十六进制形式一般用于特定场景,例如在硬件编程或精确表示浮点数时使用。

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

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

相关文章

【JavaEE初阶】博客系统后端

文章目录 一. 创建项目 引入依赖二. 设计数据库三. 编写数据库代码四. 创建实体类五. 封装数据库的增删查改六. 具体功能书写1. 博客列表页2. 博客详情页3. 博客登录页4. 检测登录状态5. 实现显示用户信息的功能6. 退出登录状态7. 发布博客 一. 创建项目 引入依赖 创建blog_sy…

Qt编写自定义控件:自定义表头实现左右两端上部分圆角

如上图&#xff0c;左上角和右上角凸出来了。设置表格圆角和表头圆角和QHeaderView::section圆角都不管用。解决此问题需要重写QHeaderView的paintSection()函数&#xff1a; class CustomHeaderView : public QHeaderView { public:explicit CustomHeaderView(Qt::Orientati…

使用toad库进行机器学习评分卡全流程

1 加载数据 导入模块 import pandas as pd from sklearn.metrics import roc_auc_score,roc_curve,auc from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression import numpy as np import math import xgboost as xgb …

Layui实现OA会议系统之会议管理模块总合

目录 一、项目背景 二、项目概述 1. 概述 2. 环境搭建 3. 工具类引用 4. 功能设计 4.1 会议发布 4.2 我的会议 4.3 会议审批 4.4 会议通知 4.5 待开会议 4.6 历史会议 4.7 所有会议 5. 性能优点 5.1 兼容性好 5.2 可维护性和可扩展性 5.3 轻量灵活 5.4 模块化设计…

C++ 第六弹 STL

目录 1.什么是stl 2.六大组件-容器-序列式容器-C98 string 3.六大组件-容器-序列式容器-C98 vector 4.六大组件-容器-序列式容器-C98 list 5.六大组件-容器-序列式容器-C98 deque 6.六大组件-容器-序列式容器-C11 array 7.六大组件-容器-序列式容器-C11 forward_list 8…

Kaggle狗图像分类实战

文章目录 Kaggle狗图像分类实战d2l安装问题python语法学习os.path.joind2l 数据加载streamlit Kaggle狗图像分类实战 d2l安装问题 d2l安装失败&#xff0c;报错如上图 去下面的网站下载到该项目文件目录下再pip install即可 Python d2l项目安装包(第三方库)下载详情页面 - …

若依打印sql

官方issue 自动生成的代码&#xff0c;sql日志怎么没有打印 在ruoyi-admin中的application.yml配置如下。 # 日志配置&#xff0c;默认 logging:level:com.ruoyi: debugorg.springframework: warn#添加配置com.ying: debug输出sql

java 分支控制语句

在程序中&#xff0c;程序运行的流程控制决定程序是如何执行的。 顺序控制 介绍&#xff1a; 程序从上到下的逐行的执行&#xff0c;中间没有任何判断和跳转。 使用&#xff1a;java中定义变量时&#xff0c;采用合法的前向引用。如&#xff1a; public class Test{int num…

成都链安:7月区块链安全事件爆发式增长,导致损失超4.11亿美元

7月&#xff0c;各类安全事件数量及造成的损失较6月爆发式增长。7月发生较典型安全事件超36起&#xff0c;各类安全事件造成的损失总金额约4.11亿美元&#xff08;虚拟货币案件涉案金额除外&#xff09;&#xff0c;较6月上涨约321%。Rug Pull导致损失约2065万美元&#xff0c;…

【linux基础(三)】Linux基本指令(下)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux基本指令 1. 前言2. 取头…

HTML 是什么?它的全称是什么?

聚沙成塔每天进步一点点 专栏简介HTML是什么&#xff1f;HTML的全称是什么&#xff1f;写在最后 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对We…

VMware ESXI虚拟网络和物理网络的对接

探讨VMware ESXI虚拟网络和物理网络的对接 前提&#xff1a; 在上篇搭建了ESXI 6.7&#xff0c;那和VMware Workstation一样想要创建虚拟机前提就必须先创建网络。没有网络连最基本的通信都没有&#xff0c;那肯定不行。所以我们解析要研究一下ESXI的网络。 物理连接模式&am…

Linux Day05

一、库文件生成与使用 1.1库文件 头文件是方法的声明&#xff0c;不是方法的实现 方法的实现是在库&#xff0c;库是预先编译好的方法的集合即.o文件 Linux上的库分为静态库(libxxx.a)和共享库(libxxx.so) 库文件常存放在/lib或者/usr/lib 库对应的头文件一般放在/usr/inc…

【188】Java8利用AVL树实现Map

AVL树又被叫做平衡二叉搜索树、平衡二叉树。AVL是其发明者的首字母缩写。 这篇文章中&#xff0c;AVLTreeMap 类集成了 java.util.Map 接口&#xff0c;并利用 AVL 树结构实现了 Map 接口的所有方法。本文还给出了测试代码。 为什么要发明AVL树&#xff1f; 当我按照从小到大…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

将自己的网站免费发布到互联网上【无需公网IP】

将自己的网站免费发布到互联网上【无需公网IP】 文章目录 将自己的网站免费发布到互联网上【无需公网IP】将本地搭建的网站发布到互联网步骤 ↓1. 注册并安装cpolar客户端1.1 windows系统1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09;2. 登录cpolar web UI管理界…

Gradio-YOLOv5-YOLOv7 搭建Web GUI

目录 0 相关资料&#xff1a;1 Gradio介绍2 环境搭建3 GradioYOLOv54 GradioYOLOv75 源码解释 0 相关资料&#xff1a; Gradio-YOLOv5-Det&#xff1a;https://gitee.com/CV_Lab/gradio_yolov5_det 【手把手带你实战YOLOv5-入门篇】YOLOv5 Gradio搭建Web GUI: https://www.bi…

一次某某云上的redis读超时排查经历

性能排查&#xff0c;服务监控方面的知识往往涉及量广且比较零散&#xff0c;如何较为系统化的分析和解决问题&#xff0c;建立其对性能排查&#xff0c;性能优化的思路&#xff0c;我将在这个系列里给出我的答案。 问题背景 最近一两天线上老是偶现的redis读超时报警&#xf…

ChatGPT在工作中的七种用途

1. 用 ChatGPT 替代谷歌搜索引擎 工作时&#xff0c;你一天会访问几次搜索引擎&#xff1f;有了 ChatGPT&#xff0c;使用搜索引擎的频率可能大大下降。 据报道&#xff0c;谷歌这样的搜索引擎巨头&#xff0c;实际上很担心用户最终会把自己的搜索工具换成 ChatGPT。该公司针对…

KiCad各层简述

KiCad各层简述 KiCAD在Pcbnew中总计提供了32个铜层供导线走线&#xff08;可覆铜&#xff09;&#xff0c;12个固定技术层&#xff08;按照正反面分为6对&#xff09;&#xff0c;2个独立技术层&#xff0c;4个辅助层。在KiCad里Pcbnew的层描述中&#xff0c;F.代表电路板上层&…