C语言笔记 变量 运算符

变量

概念

表面:程序运行过程中可以改变的数据

实质:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。

整个变量分为三部分分:

变量名:这只是变量的一个标识,我们借助变量名来存取数据。

变量空间/内存单元:这个就是内存中分配的一块用来存储数据的空间/区域。

数据/变量值:这个就是存放在变量空间中的数据

注意:我们把数据存放空间量名对应空间的过程称之为变量的赋值操作。

语法

[修饰符] 数据类型 变量列表

命名规范

  1. 变量名可以由数字、字母(区分大小写)、下划线_、$组成,不能以数字为开头。
  2. 不建议使用中文,不建议使用拼音。
  3. 变量名不能以系统中已有的标识符重名。(比如关键字,保留字...,举例:int,signed,if ,bireak...)

案例

//方式1:先声明,后赋值,注意:赋值操作顺序,从右往左

int num1;

num1 = 21;//赋值操作,顺序,从右往左,这句代码的意思是:将21赋值给num1(num1对应的内存单元

printf(%d,num1);//将num1对应的数据输出到控制台,需要指明输出数据的格式:int使用占位符%d表示

//方式2:声明并赋值

int num3 =21; //zhejudaimaz

说明:

1.变量定义是,利用同一个类型标识符可同时定义多个变量,各个变量之间使用(英文逗号)分割。

2.定义变量后,如果未对变量进行赋值

3.可以在变量定义的同时给变量赋值,这个操作称为变量的初始化,C语言允许对变量进行初始化。

4.初始化变量是,尽量做到类型相同,例:long l = 567L

5.整型数据在内存中的存放方式:

按照补码的方式存放:

正整数的补码就是将该数据转换为二进制格式。

负整数的补码就是将该数据的绝对值转换为二进制格式,按位取反,并+1

  1. 浮点型数据在内存中的存放方式

采用指数方式存放:

类型

符号位

指数为位

尾数位/部分(小数)

float(4个字节)

1

8

23

类型

符号位

指数为位

尾数位/部分(小数)

double(8个字节)

1

11

52

例子:

需求:将27.5float类型存放:

解析:

  1. 27.5的二级制为11011.1,指数表示法:1.10111 * 2 4
  2. 指数:4,加上127,就是131,二进制1000 0011
  3. 尾数(小数点后的数)10111,补够231011 1000 0000 0000 0000 000用二进制表示就是 (符号数位1)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 0000 0000 000
  4. 所以 单精度浮点型数据27.5 在内存中的存储方式如下

0 1000 0011 1011 1000 0000 0000 0000 000

注意:浮点型数据在内存中存放的是一个近似值。

7. 字符数据在内存中的存放方式:

ASCII码存放

字符的存在分为两种形式,ASCII码(编号,从0开始的正整数)和ASCII码值(数据,包括英文字母

大小写、数字、特殊符号)

注意:ASCII码是可以和整数进行数学运算的。

举例:

// 写法一

char c1 = 'A';

// 写法二

char c2 = 60;

数据类型转换

规则:不同的数据类型参与运算,需要转换为同一类型后运算

数值比较由小到大简单排序:

1.隐式类型转换

说明:编译系统自动完成,一般是低优先级类型向高优先级类型转换,这种被称为自动类型转换。

语法:大数据类型 变量= 小数据类型变量;

举例:

// 案例1

char c = 'A';// 65

int num = c;

printf("%d",num); // 65

// 案例2

char c2 = 'A';// 65

int num2 = c2 + 22;

printf("%d",num2);// 87

2强制类型转换

说明:程序员自己实现,一般是高优先级类型向低优先级类型转换,这种被称为强制类型转换(由大到小)。

说明:小数据类型 变量名 = (小数据类型)大数据类型变量;

举例:

// 案例1

int num1 = 65;

char c1 = (char)num1;

printf("%c",c1); // A

// 案例2

int num2 = 65;

char c2 = (char)(num2 + 32)

printf("%c",c2); // a

语法:小数据类型 变量名 = (小数据类型)大数据类型变量;

注意:强制类型转换过程中,可能会出现精度缺失的问题。如果大类型数据范围<==小类型数据范围,此时数据不会丢失,正常转换,如果大类型数据范围>小类型数据范围,此时丢失超出部分的是数据,精度会丢失!

原则:类型转换并不会改变原质量的类型。

运算符

算术运算符

单目运算符

说明:++  --  +(正)  -(负)  *(解引用运算符)

++a与a++的区别

  1. int a =1,int x = a++ ; ++在后,后计算
  2. int a =1,int x = ++a ; ++在前,先计算

案例:

总结:

分析以上案例,发现不论是++在前还是在后,计算数自身都会+1.区别在于运算的结果不一样,++在前,先自加1,后运算;++在后,先运算,后自加1.

练习1:

int i=3;

如果 int ret1 =(i++)+(i++);//求ret1和i的值

如果 int ret2 = (i++)+(++i);

--a与a--的区别

  1. int a =1,int x = a-- ; --在后,先计算,后自减1
  2. int a =1,int x = --a ; --在前,先自减1,后计算

双目运算符

说明:+ - * / %

举例:

#include <stdio.h>

int main ()

{

printf(3/2);
}

注意:

  1. 两个整数相除的结果是整数,小数部分被舍弃。要想其结果是实数,可在分子*1.0(隐式类型转换)
  2. 求模运算(取余运算)左右两边的操作都必须是整数。如果是类似于3.0这样的数,是错误的

关系运算符

说明:>  <  >=  <=  !=  ==

案例:

什么是表达式?

表达式是表达某种意思的式子。在C语言中,表达式指的是运算符连接操作数(变量|常量...)式子。

注意:由关系运算符构成的表达式称为关系表达式,关系表达式的值为boolean(布尔值)

  1. 非0:关系成立,为真
  2. 0:关系不成立,为假

逻辑运算符

说明:&&(与)  ||(或)  !(非)

  1. &&:逻辑与(且),符号两边的操作数都为真,结果才为真。举例:((5>4)&&(5-4)>1),结果0
  2. ||:逻辑或(或),符号两边的操作数任意一个为真,结果就为真。举例:((5>4)||(5-4)>1),结果1
  3. !:逻辑反(取反),取反,非0为真,举例:!(!(5>4)),结果1

惰性运算

所谓的惰性运算,就是减少运算次数。

短路与:&&两边的操作数,只要左边不成立0,直接返回假,不在校验右边。

短路或:||两边的操作数,只要左边成立1,直接返回真,不在校验右边。

  • 28
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值