【零基础C语言】第二节 数据类型、运算符、表达式

 涉及数制、进制、码制相关知识点:

【零基础C语言】第一节 C语言概述+【数制进制码制】-优快云博客

目录

一、C语言词汇

1.1 标识符(考点)

1.2 关键字

(1)sizeof()  ☆考点

(2)typedef()  ☆考点

1.3 运算符

☆运算符优先级

二、常量和变量

2.1 常量

2.1.1 字面常量

(1)整型常量

(2)浮点型常量 

(3) 字符型常量

2.1.2 符号常量

(1)宏常量

(2)const常量

2.2 变量

(1)变量的定义/声明

(2)变量的赋值

 三、数据类型

字符类型

3.1 变量的类型决定了什么? 

3.2 占用内存空间的大小

3.3 不同数据类型的表示范围

3.4 可参与的运算

3.5 字节存储顺序

 3.6 计算机存储的 +1 和 -1?

四、表达式

 (1)强制类型转换表达式

(2)赋值表达式

(3)运算表达式(自增自减) 

一、C语言词汇

1.1 标识符(考点)

即程序中使用的变量名、数组名、函数名等

  • 只能包含 字母(Aa~Zz)、数字(0-9)、下划线(_)   简洁有意义
  • 只能字母和下划线开头
  • 大小写敏感:C语言区分大小写,字母大写和小写是不同的变量名
  • 避免使用保留字:不能使用C语言的关键字和保留字作为变量名

main()函数和库函数 不能由用户命名

C语言字符集合

1.2 关键字

注意:下面这些不使关键字

define(宏定义预处理指令)、include(宏包含预处理指令)、

getc、printf、scanf、pow(标准库函数名) 

type、go

(1)sizeof()  ☆考点

  • sizeof(类型):类型占用的内存字节数
  • sizeof(变量或表达式):变量或表达式所属类型所占的内存字节数

增加程序的可执行性

编译时执行的运算符,不会导致额外的运行时间开销

(2)typedef()  ☆考点

typedef:为现有数据类型创建一个新的名字。typedef 数据类型 别名

1.3 运算符

  • 算术运算符(7个):+-*/%、++、--
  • 关系运算符(6个):><>= <=、==!=
  • 逻辑运算符(3个):&&||、 !
  • 赋值运算符(1个):=
  • 位运算符(6个):<<(向左移位)、>>(向右移位)、~(取反)、 |(按位或)、^(按位异或)、&(按位与)
a=3;a<<4;     00000011(十进制3) 向左移4位 00110000(48)
a=15;a>>2;         00001111(十进制15) 向右移2位 00000011(3)
~9;0000000000001001(十进制9)取反1111111111110110
9|5=13;两数对应的二进制位执行或运算,一真为真,双假为假
9^5=12;两数对应的二进制位相异或,值相同为0,相反为1
9&5=1;两数对应的二进制位执行与运算,双真为真,一假为假

☆运算符优先级

运算符分为单目(一元),双目(二元)和三目(三元)。顾名思义,目,即运算符操作数的个数

类型说明举例
单目操作数只有一个,从右向左a++(a自增1)
双目操作数有两个,从左向右a + b(两数之和)
三目目前仅有条件运算符a ? b : c(如果a为真,结果为b,否则为c

优先级运算符名称或含义使用形式说明方向
1[]数组下标数组名[常量表达式]----左到右
()圆括号(表达式)
函数名(形参表)
.成员选择(对象)对象.成员名
->成员选择(指针)对象指针->成员名
2-负号运算符-表达式单目右到左
(类型)强制类型转换

(类型名)表达式

++自增

单目

--自减--变量名
变量名--
*取值*指针变量
&取地址运算符&变量名
!逻辑非!表达式
~按位取反运算符~表达式
sizeof长度运算符sizeof(表达式)
3/得到的整数部分双目左到右
*表达式*表达式
%求余(取模)必须是整型,整除后的余数
4+表达式+表达式
-表达式-表达式
5<<左移变量<<表达式
>>右移变量>>表达式
6>大于表达式>表达式
>=大于等于表达式>=表达式
<小于表达式<表达式
<=小于等于表达式<=表达式
7==等于判断是否相等
!=不等于判断是否不等
8&按位与表达式&表达式
9^按位异或表达式^表达式
10|按位或表达式|表达式
11&&逻辑与AA和B
12||逻辑或A或B
13?:条件运算符表达式1? 表达式2: 表达式3三目右到左
14=赋值变量=表达式---------右到左
/=除后赋值变量/=表达式
*=乘后赋值变量*=表达式
%=取模后赋值变量%=表达式
+=加后赋值变量+=表达式
-=减后赋值变量-=表达式
<<=左移后赋值变量<<=表达式
>>=右移后赋值变量>>=表达式
&=按位与后赋值变量&=表达式
^=按位异或后赋值变量^=表达式
|=按位或后赋值变量|=表达式
15,逗号运算符表达式,表达式,…左到右

二、常量和变量

程序执行过程中,取值不发生改变的量是常量,取值可变的是变量

2.1 常量

2.1.1 字面常量

(1)整型常量
整形常量前缀合法示例
八进制整常数00,016,0101
十六进制整常数0x 或 0X0x1A,0XFFFF
十进制整常数无前缀123,456,7890
(2)浮点型常量 
c 语言中,实型常量可以表现为十进制小数形式或者指数形式
实型常量描述合法示例
十进制小数形式由数字 0~9 和小数点组成。0.0,-2.87,.5,1,3.14
指数形式由十进制数、e 或 E 以及指数组成。1.5e10,-2.5E-3,6.02e23
类型存储大小值范围精度
float4 字节-3.4E-38 到 3.4E+386 位小数
double8 字节-1.7E-308 到 1.7E+30815 位小数
long double16 字节-1.1E-4932 到 1.1E+493219 位小数
(3)字符型常量
  • 由单引号括起来的一个字符 如'x','y'等都是合法的字符。
  • 以反斜杠\开头的字符序列,被称为转义字符
字符表示功能
\n换行
\t横向跳到下一制表位置
\"双引号
\'单引号
\\反斜线
\ddd1-3 位八进制数所代表的字符 (ASCII)
\xhhh1-2 位十六进制数所代表的字符 (ASCII)

2.1.2 符号常量

(1)宏常量

定义方法:#define 标识符 字符串(替换文本有没有都合法)

  • 使用标识符,在使用前需要先定义
  • 慎用符号(考虑要不要分号)
  • 预编译/预处理发生替换:编译预处理结果 + 源程序编译 ——>编译得到目标代码
  • 【注意】#define N 20 宏定义只是简单的文本替换,不是赋值,不能说"定义N的值为20" 

缺点:

  1. 没有数据类型,编译器在进行宏替换时不进行类型检查
  2. 只进行简单的字符串替换,极易产生意想不到的缺点
  • 在C语言中,凡是#开头的都是 编译预处理命令行(如:#define、#include、#if),每行末尾不能用分号
  • 除了宏定义语句和复合语句,其余都要分号结束 
(2)const常量
  • 有数据类型,进行类型检查
  • 某些集成化调试工具可以对其进行调试

2.2 变量

(1)变量的定义/声明

变量使用之前必须先声明变量,只有一次

int main() {
    int a;
    int b,c;     //定义变量
    }

(2)变量的赋值

变量使用之前一定要赋值

变量使用“=”赋值,等号左侧为左值,等号右侧为右值

int main(){
   int a,b;
   char ch;
   
   a=3,b=4;
   ch= 'c';
}
int main(){
  int a = 3,b =4;  
  char ch ='c';  //初始化

  double d = 3.14, e = 2.58;   //定义变量并初始化
  ch = 'd';      //赋值:变量已存在(对应空间已开辟),将字符d直接放到一个已经存在的空间中

}

 三、数据类型

整型变量只能存放整数,实型变量只能存放浮点数

3.1 字符类型

☆练习题 

 

3.2 变量的类型决定了什么? 

地址:每个变量都分配了一个内存地址

  • 使用&(地址运算符)获取变量的内存地址
  • 通过指针访问和操作变量的内存地址

32位机的内存地址是32位,从0x00000000到0xFFFFFFFF

编译器按照变量定义的类型分配相应大小的内存空间

3.3 占用内存空间的大小

如:unsigned类型  VS 有符号类型;整数型VS 浮点数;字符型 VS 整型

3.4 不同数据类型的表示范围

与解释方式和长度有关

float大概能表达6-7位小数

char ——> 1字节 ——>8位——> 有1个符号位

unsigned char ——> 1字节 ——>8位——>没有符号位

3.5 可参与的运算

整型   :加减乘除余

浮点型:加减乘除

字符型:加减 (ASCII码)

3.6 字节存储顺序

    主要分为大端序(Big-endian)和小端序(Little-endian),区别如下

    类型解释备注
    Big-endian高位字节存入低地址,低位字节存入高地址与从左到右的书写顺序相同,便于处理字符串
    Little-endian低位字节存入低地址,高位字节存入高地址便于计算机从低位字节向高位字节运算

     3.7 计算机存储的 +1 和 -1?

    计算机中所有的数据都是采用补码存放的。

    符号位 0 为正、1 为负

    正整数 —— 源码存储,最高位为 0(正) ,正数:原码 =补码
    负整数—— 补码存储,最高位为 1 (负),负数:补码=原码符号位不变,其余各位取反,在+1

    四、表达式

    表达式 = 运算符 + 运算对象

    不是所有语句都有表达式   如:print("a");

    运算结果取决于占内存大的运算对象的数据类型

    ----------------回看运算符优先级部分↑----------------- 

     (1)强制类型转换表达式

    2种类型转换:

    • 一种是自动,在运算时不需要用户指定,系统自动进行的类型转换,如3+6.5
    • 一种就是强制,当自动不能实现目的时,可以用强制
    int b =7;    float a = 2.5,c = 4.7;
    
    a + (int)(b/3 *(int)(a+c)/2.0)%4 
    =2.5 +(int)(2 * 7/2.0)%4
    =2.5 + 7 %4 
    = 2.5+3 
    = 5.5

    (2)赋值表达式

    (3)运算表达式(自增自减) 

    int m =1;

    n = ++m;

    m先自增1,再赋值给n,所以n=2

    int m = 1;

    n = m++; 

    m先赋值给n,m再自增1,所以n=1

    ----------------回看运算符优先级部分↑------------------

    五、附:标准 ASCII 码对照表

    ASCII 值控制字符ASCII 值字符ASCII 值字符ASCII 值字符
    0NUL32(space)64@96
    1SOH33!65A97a
    2STX34"66B98b
    3ETX35#67C99c
    4EOT36$68D100d
    5ENQ37%69E101e
    6ACK38&70F102f
    7BEL39'71G103g
    8BS40(72H104h
    9HT41)73I105i
    10LF42*74J106j
    11VT43+75K107k
    12FF44,76L108l
    13CR45-77M109m
    14SO46.78N110n
    15SI47/79O111o
    16DLE48080P112p
    17DCI49181Q113q
    18DC250282R114r
    19DC351383S115s
    20DC452484T116t
    21NAK53585U117u
    22SYN54686V118v
    23TB55787W119w
    24CAN56888X120x
    25EM57989Y121y
    26SUB58:90Z122z
    27ESC59;91[123{
    28FS60<92\124
    29GS61=93]125}
    30RS62>94^126`
    31US63?95_127DEL

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值