2021-09-08 C语言 数据类型、常量、变量及运算符

C语言(数据类型及常量) 数据类型其实是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。简单来说,就是组织和操作数据。数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)。数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效的利⽤内存。了解数据类型的内存需求是理解计算机管理和操作数据的关键。⼩贴⼠:简单来讲,程序的运⾏需要⽤到内存。 阅读详情

Day2数据类型、常量、变量及运算符
数据类型
1.数据类型的分类
在这里插入图片描述

2.基本数据类型
<limits.h>头文件查看数据类型长度
逻辑类型:只有两个量true和false,表示逻辑真值和逻辑假值(bool类型)
整数类型:包括char、short、int和long
浮点类型:包括float和double
void类型:主要用于说明不返回值的函数或指向任意类型的指针等
在这里插入图片描述

3.强制数据类型转换
强制数据类型转换是指采用某种方式将某种数据类型强制转换成指定的数据类型。包括显示数据类型转换和隐式数据类型转换。
例:

int a=22 , b=0 ;
float c=24.87 , d=3.3 ;
b = (int) (a+c+d) ; //b的值为50

注:
强制类型转换符后面的表达式如存在复杂运算,就一定要用小括号括起来。
强制类型转换是一种不安全的转换,一般是将高级类型转换成低级类型,要丢失数据精度。
强制数据类型转换并不一定改变表达式中变量的数据类型和其值。

常量
1.常量是指在程序运行期间其数值不发生变化的数据
1.1.整型常量:整型常量通常简称为整数(十进制、八进制、十六进制)。
1.2.浮点常量:浮点常量又称为实数,一般含有小数部分,在C语言中实数只有十进制,分为单精度和双精度。有两种表示方法:一般形式(3.5,-12.5,3.1415926)和指数形式(指数常量)。%f输出打印浮点数,格式[+|-]M.N。
1.3.指数常量:指数形式的实数一般是由尾数部分、字母部分(e或E)和指数部分组成。格式[+|-]M.N<e|E>[+|-] 例:1.176e+10表示1.176*10^10
1.4.字符常量:字符常量是指单一字符、其表示形式是由两个单引号包括的一个字符。例:’ A ’ , ’ a ’ , ’ 0 ’ , ’ + ’ , ’ : ’ , ’ ? ’ , ’ $ ’都是字符常量。%c输出打印字符,%d输出打印字符的ASCⅡ码值。
在C语言中字符常量具有数值且值就是该字符的ASCⅡ码值。
例:

char a , b , u , v ;
a = ' f ' ; //将a赋值70
b = ' A ' + 2 ; //b存放的是'C'字符(65+2)
u = '  ' + ' B ' ; //u存放的是'b'字符(32+66)(大小写转换)
v = ' b '- 32 ; //v存放的是'B'字符(97-32)(大小写转换)
数字字符转化为数字值:(48在ASCⅡ码中代表’0’)
char ch1 = ' 8 ' ;
int num ;
num = ch1 - 48 ;

1.5.字符串常量:字符串常量是指用双引号括起来的一串字符来表示的数据(字符串以”\0”结尾,即” 9 ” = ‘ 9 ‘ + ‘ \0 ‘)%s输出打印字符串。
例:” Hello! “ , “ Student “ , “ 9 “ , “ LINUX “ , “ 李四 “……
1.6.标识常量:标识常量是指用标识符代替常量使用的一种常量,其名称通常是一个标识符也叫符号常量,一般用大写字母书写,在使用前必须预先定义。
定义格式: #define <标识常量名称> <常量>
例:

#define MAX 50
#define PI 3.1415926
#define NULL 0
#define EOF -1
#define ERROR -1

定义一个宏名字,可以在其他宏定义中使用。
例:

#define ONE 1
#define TWO ONE+ONE

如果一个串长于一行可在行尾用反斜线”\”读行。
例:

#define LONG_STRING “this is a very very long string that is used as \
an example “

1.7.宏定义函数
在软件开发过程中,经常有一些常用或者通用的功能或代码段,封装成为宏定义。
例:

#define MAX ( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) )
即
int max ( int a , int b )
{
	return ( a > b ? a : b )
}

有一些任务根本无法用函数实现,但是用宏定义却可以,比如参考类型传递给带参的宏。
例:

#define MALLO ( ( n.type ) \ ( ( type * ) malloc ( n ) * sizeof ( type ) )

1.8.案例
一个水分子的质量约为3.0*10-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。

#include <stdio.h>
#define W 3.0e-23
#define C 950

int main(int argc, char *argv[])
{
        float n, total;
        printf("please input:");
        scanf("%f", &n);
        total = n * C / W;
        printf("%e\n", total);
        return 0;
}

变量
1.变量基础

  1. 变量名由字母、数字、下划线组成,不能以数字开头,不能和C的关键字重名。
  2. 在程序运行时,变量占据存储空间的大小由其数据类型决定。
  3. 变量在内存空间中的首地址成为变量地址。

2.变量的说明
变量在程序中使用时必须预先说明它们的存储类型和数据类型。
一般格式:<存储类型> <数据类型> <变量名>
<存储类型>是关键字auto、register、static和extern。
<数据类型>可以是基本数据类型,也可以是自定义的数据类型。
3.变量的存储类型
3.1. auto
auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里(默认是随机值,说明时可省略关键字auto)
例:

auto int k ; int j ;

3.2. register
register称为寄存器型,register变量是想将变量放入CPU的寄存器,这样在变量使用次数过多时,可以加快程序运行速度,如果申请不到就使用一般内存(同auto)。register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值并且长度小于或等于整型长度。
不能用”&”来获取register变量的地址(变量直接存于寄存器中)
3.3. static
static变量称为静态存储类型的变量,即可以在函数体内也可以在函数体外说明(默认为0)。
局部变量使用static修饰有以下特点(通常局部变量默认随机值,全局变量默认0):

  1. 在内存中以固定地址存放的,而不是以堆栈方式存放(不是自动分配自动回收)。
  2. 只要程序没结束就不会随着说明它的程序的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上依次调用存入的值。

3.4. extern
当变量在一个文件中的函数体外说明(全局变量),所有其他共同编译的文件中的函数或程序段都可以引用这个变量,extern变量成为外部参照引用型,使用extern说明的变量是像引用在其他文件中函数体外部说明的变量即说明使用其他文件中的全局变量,使用格式:extern int global_a ; 使用时应将多个文件联合编译。
static修饰的全局变量在其他文件无法使用。

运算符
1.算术运算符
在这里插入图片描述

2.关系运算符
在这里插入图片描述
成立为1(true)不成立为0(false)
3.逻辑运算符
在这里插入图片描述
3.1. &&运算规律
在这里插入图片描述
3.2. ||运算规律

4.位运算符

4.1. 位逻辑反”~ “运算符的运算规律(取反):
例:

unsigned char x = 0x17 , y ;
y = ~x ; 
计算机内存中的x内容如下:
00010111
y被赋值后的计算机内存中的内容如下:
11101000
y赋值结果为:0xE8

4.2. 位逻辑与”&”运算符的运算规律:
在这里插入图片描述
例:

unsigned char x = 0126 , y = 0xac , z ;
z = x & y ;
x&y位逻辑与运算:
左运算量:01010110 右运算量:10101100
&结果:00000100
z赋值结果:0x04

4.3. 位逻辑或”|”运算符运算规律:
在这里插入图片描述
例:

unsigned char x = 076 , y = 0x89 , z ;
z = x | y ;
x|y位逻辑或运算:
左运算量:00111110 右运算量:10001001
|结果:10111111
z赋值结果为:0xbf

4.4. 位逻辑异或”^”运算符的运算规律:
在这里插入图片描述
例:

unsigned char x = 75 , y = 0173 , z ;
z = x ^ y ;
x^y的位逻辑异或运算:
左运算量:01001011 右运算量:01111011
^结果:00110000
z赋值结果为:060

4.5. 位移运算符的一般形式:
<运算量> <运算符> <表达式>
其中<运算量><表达式>必须为整型结果数值,<表达式>为左移位”<<”或右移位”>>”运算符。
例:

unsigned char a = 0xe4 , b ;
b = a << 3 ;
运算量a左移位3位存入b的情况:
左运算量:11100100
<<结果:00100000
b赋值结果为:0x20
右移位同理。

4.6. 思考
(1)如何把一个无符号数的某位快速置1?

“|”运算符,将需要置1的位填1其余填0。
设x为无符号数,y为位数,x = x | ( 1 <<( y - 1 ) )

(2)如何把一个无符号数的某位快速清0?

“&”运算符,将需要清0的位填0其余填1.
x = x & ( 1 << ( y - 1 ) )

(3)如何利用位运算把一个十进制数转化成一个十六进制数?

b = a / 16 即b = a >> 4 , b = a % 16 即b = a & 0xf(00001111)

5.赋值运算符
5.1. 赋值运算符为”=”,其运算的一般格式如下:
<左值表达式> = <右值表达式>
5.2. 赋值复合运算符其运算的一般形式如下:
<变量> <操作符> = <表达式>
在这里插入图片描述
6.C语言的特殊运算符
6.1. 条件运算符” ? : “
是三目运算符,其运算的一般格式:

<表达式1> ? <表达式2> : <表达式3>

表示如果表达式1成立则执行表达式2,否则执行表达式3。
例:

int x = 82 , y = 101 ;
x >= y ? x + 18 : y - 100 ; //结果为1
x < ( y - 1 ) ? x - 22 : y - 1 ; //结果为60

6.2. 逗号运算符
例:

(1)float x = 10.5 , y = 1.8 , z = 0 ;
(2)z = ( x = y = 5 , x += 1 , y = x + 0.2 ) //z赋值结果为6.2
从左到右执行,整个表达式的值为括号内最后一个表达式的值,即y = x + 0.2。

6.3. sizeof运算符
运算的一般格式:

sizeof(<类型或变量名>)

注:它只针对数据类型,而不针对变量!
例:

sizeof(double) ; sizeof(long) ;

7.C运算符的优先级
在这里插入图片描述
例:

int x = 1 , y = 0 , z = 0 ;
x++ && y++ || ++z ; //结果为1(2 1 1 )
! ( x + 1 > 0 ) && y++ || ++z ; //结果为1(1 0 1 )
x += y == z , y = x + 2 ,z = x + y + x > 0 ; //x为2,y为4,z为1
C语言运算符优先级(大全) .” 和 "->"多用在结构体(引用类,共用体)选择成员时使用。直接访问结构的成员时用点运算符,通过指针访问结构的成员用箭头运算符。🔺注意:当优先级相同时,按结合方向来进行计算。🔴 结合方向从左到右。🔴 结合方向从左到右。 阅读详情

相关推荐

定义类模板实现2个数的算术运算

本题目要求定义类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算,在main()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、最小值、加、减、乘、除的结果。

Linux-C基础之数据----存储类型、数据类型、常量、运算

一、数据类型: (一)概况: unsigned无符号正数 signed有符号 *有符号的二进制最高位作为符号位。 基本数据类型: 1,逻辑类型:只有两个量true和false,表示逻辑真值和逻辑假值。 2,整数类型:包括char, short, int和long。 3,浮点类型:包括float和double。 4,void类型:主要用于说明不返回值的函数或指向任一类型的指针等。 *正数的补码和原...

lingjinyue的博客 1170

【180609】剑侠情缘_整套源码+地图编辑器(单机学习例子)

剑侠情缘_整套源码+地图编辑编(单机学习例子)完整源码下载地址:点击下载备用下载地址:点击下载

资源小站 6278

青铜题:输出3.1415926、12345678.123456789的小数、指数形式。

如何使用科学计数法:在printf();里用%e的一个格式控制符。另一种是cout <<scientific << num;意思是输出变量num的指数形式。但这两种方法输出后面只有两位的整数,而这个例子有三位。e+000 相当于乘以10的0次方。e+007相当于乘以10的7次方。

m0_74144989的博客 702

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

python 中心线提取_二值分析 | OpenCV + skimage如何提取中心线

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识问题前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像:怎么得到白色Blob中心线,他希望的效果如下:显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取二值对象的骨架,提取骨架的方法在OpenCV的扩展模块中,另外skimage包也支持图像的骨架提取。这里就...

weixin_42204453的博客 4290

计算机组成原理(微课版)——第三章运算方法与运算器部分课后习题答案及解析

📌

m0_72265583的博客 1万+

一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)

0.前言: 本文基于斯坦福Kristin Sainani 教授的学术论文写作公开课——SCI论文写作(Writing in the Sciences)。在此基础上进行章节顺序的重排及部分内容的删减,以方便第一次进行英语学术论文写作的同学快速上手。 时间充足和想要系统学习英文学术写作的同学,十分建议观看完整课程视频,一定会受益匪浅!课程地址如下: 课程B站地址:https://www.bilibili.com/video/BV1zv41177JQ 1.论...

Ogmx的博客 3万+

c语言中 char* 和 unsigned char* 的区别浅析

背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char*类型的参数调用。这个警告很容易避免,但是char*和unsigned char*到底有什么区别呢,本文作一个简单的探讨。char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显

guotianqing的博客 11万+

获取本机正版windows10激活密钥,以及正版office

本方法面向的是以前买过笔记本电脑给你预装了正版系统,激活了正版office(一般是家庭版)的情况,其他情况请自行尝试。

qq_45774917的博客 2万+

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1686

python格式化输出

一、%格式化输出 1、整数的输出(参照ASCII) %o —— oct 八进制 %d —— dec 十进制(digit ) %x —— hex 十六进制 >>> print('%o' % 20) 24 >>> print('%d' % 20) 20 >>> print('%x' % 20) 14 2、浮点数输出 %f —— float 保留小数点后面六位有效数字 %.3f,保留3位小数位 %e —— 保留小数点后面六位有效数字,指数形式输出 %.

Python热爱者的博客 5523

【EB_Tresos专题】-01-EB Tresos导入工程

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 6434

C语言基础二:常量与变量

用编译预处理命令#define(宏定义)# define 标识符 字符串标识符和字符串之间用空格隔开句末不用分号表示符的命名采用大写,如果有多个单词,使用下划线分隔,举例:MAX_VAL,MIN_VAL,AVG#define PI3.14#define R5int main()int a =PI*R*R,//预处理后:int a=3.14*5*5案例:在程序中使用符号常量。30/*给变量赋值*//*定义整型变量*/num = 10;

m0_64837308的博客 1229

YOLOv11 结合 BiFormer 注意力:打造多场景高精度检测模型实战教程

注册BiFormer模块(若代码未自动注册)# 加载自定义配置的YOLOv11模型。

know_F0727的博客 251

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言常量变量以及运算符感悟

不管是常量,还是变量其实都是存在内存中,常量存储在常量池,变量是根据情况存储,默认。变量代表内存中具有特定属性的一个存储单元,它是用来存储数据的,也就是存放变量的值。一个类型说明语句可以同时定义多个类型的变量,各个变量之间使用逗号分隔,多个同类型的。由于各种整型变量所占的字节数有限,因此,他们所能存储的整数有一定的范围。语言中,要求对所用到的变量使用前必须强制定义,即先定义,后使用。,我们对同一个变量进行赋值的时候,后面赋的值会覆盖掉前面赋的值。数据,在未对这些变量赋值前,这些变量中的值是随机的;

2501_90124553的博客 957

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言

C语言 42.C语言是一种计算机高级语言。 43.C语言允许直接访问物理地址,能进行位操作。 44.C语言是结构化程序设计语言 45.c程序要通过编译,连接才能得到可执行的目标程序 46.用c语言编写程序,可以编写出任何类型的程序 47.C语言允许有空函数 48.C程序书写格式,允许一行内可以写几个语句 49.C程序的语句无行号 50.C语言的每个语句的最后必须有一个分号 51.C语言本身没有输入...

qq_45481418的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《C语言运算符100例》优先级面试错题

十年职场,三年面试(面试官视角)经验总结

英雄哪里出来 1万+

嵌入式学校第7天--C语言的数据类型、常量与变量、进制转换、原反补码

变量数据类型 变量名列表;// ① 声明变量并赋值 (声明一块变量存储单元,并向这个空间存储一个初始值)//将5赋值给变量num,也就是将5赋值给变量num对应的存储单元​// ② 声明一个变量,再给变量赋值(声明一块变量,暂时为空)int age;age = 21;​// 混合应用//此时,count变量空间中存储的数据是0count = 1;// 此时,count 变量空间中存储的数据是1变量名的命名要符合下列两个规则。

weixin_64313142的博客 1362

C语言学习笔记:常量与变量

用编译预处理命令。

2403_88736889的博客 1250

C语言基础:菜鸟如何养成程序猿(一)

C语言是计算机中很多现代编程语言的开山鼻祖,它创造了信息时代和科技时代的文明。计算机语言由机器语言慢慢演变为高级语言。1958年7月3日,ALGOL语言(Algorithmic Language)创立。C语言的原型就是ALGOL 60语言。C语言的演变过程:ALGOL 60语言(简称A语言)—>CPL语言—>BCPL语言(简称B语言)—>C语言。

文优 4605

C语言:常量

'_' 等,比如: '刘' 就不是字符,一个汉字所占的字节数超过1个字符。说明:在C语言中,支持字符串常量,不支持字符串变量。如:0.123,-12.6,0.123F(float类型的常量,需要跟上 F/f ),内存中所有负数的位置都用来表示整数,此时它的正数范围超过有符号正数范围。不管是变量还是常量,都是需要在内存中申请一块空间,用于数据的存放。② 在符号e的后面必须为整数,不能是带有小数点的实数型。:一般通过宏定义,在预处理的时候替换成具体的常量。英文输入法下输入的字母、数字、符号都是单字符。

2302_78686222的博客 1145

第2讲:C语言数据类型和变量

下面盘点一下C语言提供的各种数据类型,本章节主要探讨内置数据类型。C语言把数据类型分为这么些。,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作。来描述生活中的各种数据。

Lswblue的博客 688

C语言变量和常量

C语言变量和常量

w541541的博客 282

C语言基础:常量与变量和基本类型数据

指数形式:一般数学上对于小数可以以10为底进行表示 比如3.14 * 10²,但是在使用英文半角输入法的时候没办法输入上底或者下底,所以C语言规定以字母e或者E来表示指数,并且要求字母e或者E的前面必须有数字,字母e或者E的后面必须为整数。由此可见 ,在内存中字符数据的存储形式与整型数据类似,这就使得字符型数据和整型数据之间可以通用,也就是1个字符数据既可以以字符形式输出,也可以以整数形式输出。C编译系统规定以一个字节的存储空间来存放一个字符,因此,一个字符型变量在内存中的大小是1字节。

2401_88897915的博客 1506

《C语言动漫对话教程(入门篇)》

13万字《C语言动漫对话教程(入门篇)》

英雄哪里出来 4万+
上一篇: 2021-09-05 C语言基础知识及必备的 Linux 命令
下一篇: 2021-09-09 C语言 输入输出专题
Raymond430
博客等级 码龄7年 91粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值