5、常量与变量

news2024/12/28 5:43:54

目录

1.数值型变量

(1)整型常量

(2)实型常量

2.字符型常量

(1)字符常量

(2) 字符串常量

3. ASCII表

4. 转义符号

5.符号常量

6. 整型变量

(1)有符号基本整型

(2)无符号基本整型

(3)有符号短整型

(4)无符号短整型

(5)有符号长整型

(6)无符号长整型

7. 实型变量

(1)单精度类型

(2)双精度类型

(3)长双精度类型

8. 字符型变量

9.数值型和字符型数据的字节数和数值范围


1.数值型变量

(1)整型常量

整型常量就是直接使用的整型常数,如123、-456等。整型常量可以是长整型、短整型、符号整型和无符号整型。

 1)无符号短整型的取值范围是0~65535,有符号短整型的取值范围是-32768~+32767,这些都是16位整型常量的范围。

 2)如果整型是32位的,那么无符号形式的取值范围是0~4294967295,有符号形式的取值范围是-2147483648~+2147483647。但是整型如果是16位的,就与无符号短整型的范围相同。

注意:不同的编译器,整型的取值范围是不一样的。在字长为16位的计算机中,整型就为16位;在字长为32位的计算机中,整型就为32位。

 3)长整型是32位的,其取值范围可以参考上面有关整型的描述。

在编写整型常量时,可以在常量的后面加上符号L或者U进行修饰。L表示该常量是长整型,U表示该常量为无符号整型,例如:

注意:表示长整型和无符号整型的后缀字母L和U可以使用大写,也可以使用小写。

整型常量可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。

下面分别进行介绍:

a.八进制整数

要使得使用的数据表达形式是八进制,需要在常数前加上0进行修饰。八进制所包含的数

字是0~7。例如:

注意:以下关于八进制的写法是错误的:

b.十进制整数

十进制是不需要在其前面添加前缀的。十进制中所包含的数字为0~9。例如:

这些整型数据都以二进制的方式存放在计算机的内存之中,其数值是以补码的形式进行表示的。一个正数的补码与其原码形式相同,一个负数的补码是将该数绝对值的二进制形式按位取反后再加1。例如,一个十进制数11在内存中的表现形式如图

如果是-11,那么在内存中又是怎样的呢?因为是以补码进行表示,所以负数要先将其绝对值求出;然后进行取反操作,得到取反后的结果。

取反之后还要进行加1操作,这样就得到最终的结果。则为-11在计算机内存中如图

注意:对于有符号整数,其在内存中存放的最左面一位表示符号位,如果该位为0,则说明该数为正;若为1,则说明该数为负。

c. 十六进制整数

常量前面使用0x作为前缀,表示该常量是用十六进制进行表示的。十六进制中包含数字0~9以及字母A~F。例如:

注意1:其中字母A~F可以使用大写形式,也可以使用a~f小写形式。

注意2:以下关于十六进制的写法是错误的:

(2)实型常量

实型也称为浮点型,由整数部分和小数部分组成,并用十进制的小数点进行分隔。表示实数的方式有科学计数方式和指数方式两种。

a.科学计数方式

科学计数方式就是使用十进制的小数方法描述实型,例如:

b.指数方式

有时,实型非常大或者非常小,使用科学计数方式是不利于观察的。这时,可以使用指数方法显示实型常量。其中,使用字母e或者E进行指数显示,如45e2表示的就是4500,而45e-2表示的就是0.45。如上面的SciNum1和SciNum2代表的实型常量,使用指数方式显示这两个实型常量,代码如下:

在编写实型常量时,可以在常量的后面加上符号F或者L进行修饰。F表示该常量是float单精度类型,L表示该常量为long double长双精度类型。例如:

如果不在后面加上后缀,那么在默认状态下,实型常量为double双精度类型。例如:

注意:后缀的大小写是通用的。

2.字符型常量

字符型常量与之前所介绍的常量有所不同,即要对其字符型常量使用指定的定界符进行限制。字符型常量可以分成两种:一种是字符常量,另一种是字符串常量。

(1)字符常量

使用单直撇括起一个字符,这种形式就是字符常量。例如,'A'、'#'、'b'等都是正确的字符常量。在这里,需要注意以下几点:

a.字符常量只能包括一个字符,不能是字符串。例如,'A'是正确的,但是用'AB'来表

示字符常量就是错误的。

b.字符常量是区分大小写的。例如,'A'字符和'a'字符是不一样的,这两个字符代表着

不同的字符常量。

c.' '这对单直撇代表着定界符,不属于字符常量中的一部分。

示例1:字符常量的输出,使用putchar函数将单个字符常量进行输出,使得输出的字符常量形成一个单词Hello并显示在控制台中。

#include<stdio.h>

int main()

{     /*注意字符是单引号*/
       putchar('H');/*输出字符常量H*/
       putchar('e');/*输出字符常量e*/
       putchar('l');/*输出字符常量l*/
       putchar('l');/*输出字符常量l*/
       putchar('o');/*输出字符常量o*/
       putchar('\n');/*换行*/
       return 0;
}

运行结果:

(2) 字符串常量

字 符 串 常 量 是 用 一 组 双 引 号 括 起 来 的 若 干 字 符 序 列, 例 如,“Have a good day!”和“beautiful day”即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。

在C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“\0”,作为字符串的结束标志。例如,字符串“welcome”在内存中的存储形式

注意:在程序中编写字符串常量时,不必在字符串的结尾处加上“\0”结束字符,系统会自动添加结束字符。

示例2:使用printf函数将字符串常量“What a nice day!”在控制台输出显示

#include<stdio.h>

int main()

{
       printf("What a nice day!\n");
       return 0;
}

运行结果:

字符常量与字符串常量之间有什么差别

a.定界符的使用不同。字符常量使用的是单直撇,而字符串常量使用的是双引号。

b.长度不同。上面提到过字符常量只能有一个字符,也就是说字符常量的长度就是1。字符串常量的长度可以是0,也可以是任意数。即使字符串常量中的字符数量只有1个,长度也不是1。例如,字符串常量“H”,其长度为2

原因:系统会自动在字符串的尾部添加一个字符串结束字符“\0”,这也就是“H”的长度是2的原因

c. 存储的方式不同,在字符常量中存储的是字符的ASCII码值;而在字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“\0”

3. ASCII表

4. 转义符号

转义符号在字符常量中是一种特殊的字符。转义字符是以反斜杠“\”开头的字符,后面跟一个或几个字符。常用的转义字符及其含义

5.符号常量

例如:一个求解长方体体积的程序,其中长方体的高度是固定的,使用一个符号名代替固定的常量值,这里使用的符号名就称之为符号常量

示例3:使用符号常量来表示圆周率,在控制台上显示文字提示用户输入数据,该数据是有关圆半径的值。得到用户输入的半径,经过计算得到圆的面积

#include <stdio.h>
#include <stdlib.h>

#define PAI 3.14 /*定义符号变量*/

int main(void)

{
       double radius; /*定义半径变量*/
       double result; /*定义结果变量*/
       printf("请输入圆的半径:"); /*提示*/
       scanf_s("%lf", &radius); /*输入数据*/
       result = radius * radius * PAI; /*进行计算*/
       printf("圆的面积为:%lf\n", result); /*显示结果*/

       return 0; /*程序结束*/
}

运行结果:

6. 整型变量

整型变量是用来存储整型数值的变量。整型变量可以分为如表3.4所示的6种类型,其中基本类型的符号使用int关键字,在此基础上可以根据需要加上一些符号进行修饰,如关键字short或long

注意:表格中的[]为可选部分。例如[signed] int,在编写时可以省略signed关键字。

(1)有符号基本整型

有符号基本整型是指signed int型,其值是基本的整型常数。编写时,常将其关键字signed进行省略。有符号基本整型在内存中占4个字节,取值范围是-2147483648~2147483647。注意:通常说到的整型,都是指有符号基本整型int。

定义一个有符号整型变量的方法是在变量前使用关键字int。例如,定义一个整型的变量

iNumber,并为其赋值10的方法如下:

或者在定义变量的同时为其赋值

注意:在编写程序时,程序中用到的所有变量的定义应该放在变量的赋值之前,否则会产生错误。通过下面的两个例子进行对比:

示例4:对有符号基本整型变量的使用

#include <stdio.h>

int main()

{
       signed int iNumber;
       iNumber = 10;
       printf("%d", iNumber);

       return 0;
}

运行结果:

(2)无符号基本整型

无符号基本整型使用的关键字是unsigned int,其中的关键字int在编写时可以省略。无符号基本整型在内存中占4个字节,取值范围是0~4294967295。

定义一个无符号基本整型变量的方法是在变量前使用关键字unsigned。例如,要定义一个无符号基本整型的变量iUnsignedNum,并为其赋值10的方法如下:

(3)有符号短整型

有符号短整型使用的关键字是signed short int,其中的关键字signed和int在编写时可以省略。有符号短整型在内存中占两个字节,取值范围是-32768~32767。

定义一个有符号短整型变量的方法是在变量前使用关键字short。例如,要定义一个有符号短整型的变量iShortNum,并为其赋值10的方法如下:

(4)无符号短整型

无符号短整型使用的关键字是unsigned short int,其中的关键字int在编写时可以省略。无符号短整型在内存中占两个字节,取值范围是0~65535。

定义一个无符号短整型变量的方法是在变量前使用关键字unsigned short。例如,要定义一个无符号短整型的变量iUnsignedShtNum,并为其赋值10的方法如下:

(5)有符号长整型

有符号长整型使用的关键字是signed long int,其中的关键字signed和int在编写时可以省略。有符号长整型在内存中占4个字节,取值范围是-2147483648~2147483647。

定义一个有符号长整型变量的方法是在变量前使用关键字long。例如,要定义一个有符号长整型的变量iLongNum,并为其赋值10的方法如下:

(6)无符号长整型

无符号长整型使用的关键字是unsigned long int,其中的关键字int在编写时可以省略。无符号长整型在内存中占4个字节,取值范围是0~4294967295。

定义一个无符号长整型变量的方法是在变量前使用关键字unsigned long。例如,要定义一个无符号长整型的变量iUnsignedLongNum,并为其赋值10的方法如下:

7. 实型变量

实型变量也称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。实型变量根据实型的精度可以分为单精度类型、双精度类型和长双精度类型3种

(1)单精度类型

单 精 度 类 型 使 用 的 关 键 字 是 float, 它 在 内 存 中 占 4 个 字 节, 取 值 范 围是-3.4×10 -38 ~3.4×10 38 。

定义一个单精度类型变量的方法是在变量前使用关键字float。例如,要定义一个变量fFloatStyle,并为其赋值3.14的方法如下:

示例5:定义一个单精度类型变量,然后为其赋值1.23

#include <stdio.h>

int main()

{
       float fFloatStyle;
       fFloatStyle = 1.23f;
       printf("%f\n", fFloatStyle);

       return 0;
}

运行结果:

(2)双精度类型

双 精 度 类 型 使 用 的 关 键 字 是 double, 它 在 内 存 中 占 8 个 字 节, 取 值 范 围是-1.7×10 -308 ~1.7×10 308 。

定义一个双精度类型变量的方法是在变量前使用关键字double。例如,要定义一个变量dDoubleStyle,并为其赋值5.321的方法如下:

示例6:定义一个双精度类型变量,然后为其赋值61.458

#include <stdio.h>

int main()

{
       double dDoubleStyle;
       dDoubleStyle = 61.458;
       printf("%f\n", dDoubleStyle);

       return 0;
}

运行结果:

(3)长双精度类型

长双精度类型使用的关键字是long double,它在内存中占8个字节,取值范围是-1.7×10 -308 ~1.7×10 308 。

定义一个双精度类型变量的方法是在变量前使用关键字long double。例如,要定义一个变量fLongDouble,并为其赋值46.257的方法如下:

示例7:定义一个长双精度类型变量,然后为其赋值46.257

#include <stdio.h>

int main()

{
       long double fLongDouble;
       fLongDouble = 46.257;
       printf("%f\n", fLongDouble);

       return 0;
}

运行结果:

8. 字符型变量

字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。

字符型变量在内存空间中占一个字节,取值范围是-128~127。

定义一个字符型变量的方法是使用关键字char。例如,要定义一个字符型的变量cChar,为其赋值为'a'的方法如下:

注意:字符数据在内存中存储的是字符的ASCII码,即一个无符号整数,其形式与整数的存储形式一样,因此C语言允许字符型数据与整型数据之间通用。例如

从上面的代码中可以看到,首先定义两个字符型变量,在为两个变量进行赋值时,一个变量赋值为'a',而另一个赋值为97。最后显示结果都是字符'a'。

示例8:为定义的字符型变量和整型变量进行不同的赋值,然后通过输出结果观察整型变

量和字符型变量之间的转换

#include <stdio.h>

int main()

{
       char cChar1;  /*定义字符型变量*/
       char cChar2;
       int iInt1; /*定义整型变量*/
       int iInt2;


       cChar1 = 'a';
       cChar2 = 97;
       iInt1 = 'a';
       iInt2 = 97;

       printf("%c\n", cChar1);
       printf("%c\n", cChar2);
       printf("%c\n", iInt1);
       printf("%c\n", iInt2);

       return 0;
}

运行结果:

9.数值型和字符型数据的字节数和数值范围

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

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

相关文章

JavaScript Break 和 Continue 语句

文章目录JavaScript Break 和 Continue 语句Break 语句Continue 语句JavaScript 标签笔记列表JavaScript Break 和 Continue 语句 break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 Break 语句 我们已经在本教程之前的章节中见到过 break 语句。它用于跳出 swi…

final的一个重要用途-宏变量和未初始化问题

/*** author 张家琛* version 1.0* date 2023/1/24 20:23*/ public class FinalDemo {public static void main(String[] args) {final var a5;System.out.println(a);} } 对于上面的程序来说&#xff0c;变量a其实根本就不存在&#xff0c;这段代码本质上执行的是转换成的&am…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用&#xff1f; mybatis configuration log-impl 作用&#xff1f; resultType和resultMap的区别&#xff1f; 参数 useGeneratedKeys &#xff0c;keyColumn&#xff0c;keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…

字节青训前端笔记 | Vite 入门

本节课&#xff0c;讲师将前置介绍有关前端工程基本知识&#xff0c;同时讲解前端构建工具及解决问题&#xff0c;进而引出作为前端构建工具的 Vite 是什么及其在开发过程中的应用。 为什么使用构建工具 前端是有一系列资源组成的&#xff0c;js 代码&#xff0c;css样式&…

ESP32 Micropython编程(Thonny)04---- 人体感应模块

本人持续分享更多关于嵌入式和单片机的知识&#xff0c;如果大家喜欢&#xff0c;别忘点个赞加个关注哦&#xff0c;让我们一起共同进步 最近使用到人体感应模块HC-SR501&#xff0c;这个模块使用十分简单&#xff0c;看下面代码就可以看出了&#xff0c;而且应用广泛&#xff…

Java 优先级队列(堆)

目录1. 优先级队列&#xff08;堆&#xff09;的概念2. 建立大根堆&#xff08;向下调整算法&#xff09;3. 堆插入元素&#xff08;向上调整算法&#xff09;4. 堆删除元素&#xff08;向下调整算法&#xff09;5. 优先级队列PriorityQueue的特性6. 优先级队列PriorityQueue的…

单向环形链表和约瑟夫问题

单向环形链表和约瑟夫问题 Josephu 问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;… n的n个人围坐一圈&#xff0c;约定编号为k&#xff08;1<k<n&#xff09;的人从1开始报数&#xff0c;数到m 的那个人出列&#xff0c;它的下一位又从1开始报数&#xff0c;数…

ubuntu压缩、归档 tar zip gzip的介绍

不同文件需要使用不同的工具进行压缩和解压&#xff0c;可以使用file文件查看是什么类型的文件 file 文件名如图&#xff0c;在第二行看到这个文件是gzip类型的。 文件&#xff1a;gzip 工具&#xff1a;gunzip gunzip是 gnu unzip的缩写。用来解压gzip压缩包。 解压命令 …

linux 内存管理

0.前言 1.了解Linux内存的管理机制(分段分页) 2.了解虚拟内存和物理内存的映射方式 3.了解操作系统内存与磁盘的交互&#xff08;分页机制---》缺页重读机制&#xff0c;用时拷贝机制) 4.应用程序如何高效使用内存和高级程序的设计方法 1.linux物理使用情况 内核区&#x…

动态站点地图提交百度收录

站点地图&#xff08;sitemap&#xff09;是一个网站的结构化数据&#xff0c;搜索引擎可以通过站点地图迅速了解一个网站的内容&#xff0c;加快搜索引擎收录。 一般来说&#xff0c;站点地图是以.xml结尾的静态化文件&#xff0c;例如个人博客和生化环材网的站点地图链接分别…

【Mysql】事务的四大特性(ACID)

【Mysql】事务的四大特性(ACID) 文章目录【Mysql】事务的四大特性(ACID)1. 概述1.1 并发事务问题1.1.1 脏读1.1.2 不可重复读1.1.3 幻读1.2 事务隔离级别1. 概述 事务的四大特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的最小操作单…

ROS学习寄录2

1 ROS核心概念 1.1 节点&#xff08;Node&#xff09; &#xff08;1&#xff09;执行具体任务的进程、独立运行的可执行文件 &#xff08;2&#xff09;不同节点可以使用不同的语言&#xff0c;可分布式运行在不同的主机 &#xff08;3&#xff09;节点在系统中的名称必须…

MODBUS总线的学习笔记

MODBUS学习记录 下面所有资料均copy于安富莱电子和博客中&#xff0c;仅作为个人学习笔记记录&#xff0c;写的不好请见谅。 1.modbus简介介绍 Modbus 是由 Modicon&#xff08;现为施耐德电气公司的一个品牌&#xff09;在 1979 年发明的&#xff0c;是全球第一个真正 用于…

PowerShell 学习笔记:操作XML文件

XML文件是有一定格式要求的文本文件。百度百科可扩展标记语言 (Extensible Markup Language, XML) &#xff0c;标准通用标记语言的子集&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展…

adversarial Learning and attacks 学习笔记

GANs大家是比较熟悉的网络结构&#xff0c;adversarial attacks 也不是很新的概念了。近期的工作有涉及到adversarial attacks&#xff0c;故整理一下学习的内容。 Adversarial Attacks 对抗攻击样本&#xff1a;一张正常的大熊猫图片&#xff08;左图&#xff09;在被加入噪…

Leetcode.1828 统计一个圆中点的数目

题目链接 Leetcode.1828 统计一个圆中点的数目 题目描述 给你一个数组 points&#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries&#xff0c;其中 queries[j] [xj, yj, rj]&#x…

Feign入门

Feign入门Feign入门Feign代替RestTemplate自定义配置Feign使用优化最佳实践Feign入门 Feign代替RestTemplate RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.ge…

linux(Debian11)安装后安装无线网卡等驱动

在工作和生活中&#xff0c;我们经常会用到linux系统&#xff0c;debian作为一个老牌的程序员常用发行版&#xff0c;自然成为我们的首选。 下面记录一下&#xff0c;安装无线网卡的过程。 首先&#xff0c;可以通过命令查看自己所需要的驱动 lspci -vvv iwlwifi 就是我所需…

机器学习为什么使用归一化? 有哪些归一化算法?

一、归一化的基本介绍 1. Why 归一化? 一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。或者举一个更浅显的例子:对房子进行…

Java——组合总和(3)

题目链接 leetcode在线oj——组合总和&#xff08;3&#xff09; 题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff…