运算符&表达式&数据类型

1.变量和基本数据类型

1.1 变量类型的概念

变量就是在程序中发生变化的量,变量有类型。

变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

1 字节(byte) = 8 位(bit)

1.2 定义格式

存储类型 数据类型 变量名;

例如:(auto) int a;

存储类型:变量存储的位置。

数据类型:名字 字节 取值范围

类型

存储大小

值范围

char

字符类型

1 字节

-2^7 到 (2^7-1)

unsigned char

无符号字符类型

1 字节

0 到 (2^8-1)

int

整数类型

4 字节

-2^31 到 (2^31-1)

unsigned int

无符号整数类型

4 字节

0 到 (2^32-1)

short

短整型

2 字节

-2^15 到 (2^15-1)

unsigned short

无符号短整形

2 字节

0 到 (2^16-1)

long

长整型

4 字节

-2^31 到 (2^31-1)

unsigned long

无符号长整形

4 字节

0 到 (2^32-1)

float

单精度浮点型

4字节

有效数据6-7位

double

双精度浮点型

8字节

有效数据15-16位

64位操作系统:long类型是8字节

1.3 初始化格式

(1)可以定义时初始化

        int a = 0;

(1)也可以先定义然后初始化

        int a;

        a = 0;

1.4 局部变量和全局变量

(1)生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。也就是存活的周期时间。时间维度。

(2)作用域:变量可以起作用的范围。空间维度。

(3)内存大致分配为五个区域:

局部变量

全局变量

  1. 定义位置

函数体内部

函数体外部

  1. 存储位置

栈区

全局区

  1. 生命周期

同函数体共存亡

同整个程序共存亡

  1. 作用域

作用于函数体内部

作用域整个程序

  1. 初值

未初始化,值为随机值

未初始化时,值为0

当我们在定义变量时,选择正确合适的数据类型,既可以提高空间利用率,同时也可以避免溢出等问题的出现。

2.常量

2.1 概念

在程序中不会发生变化的量,存在常量区。

2.2 分类

2.2.1 字符型常量

类型为char,从ascii表中找的的字符都是字符常量,不可以改变。用单引号括起来的就是字符常量,例如'A'。

类型

存储大小

值范围

char

字符类型

1 字节

-128 到 127

unsigned char

无符号字符类型

1 字节

0 到 255

signed char

带符号字符类型

1 字节

-128 到 127

原码、反码和补码:

  1. 最高位表示符号位,正数是0,负数是1。
  2. 正数原码、反码和补码都是一样的。
  3. 负数要用补码来计算:
  • 原码就是在数值前面直接加符号表示
  • 反码等于原码的符号位不变其余按位取反
  • 补码等于反码加一

例如: -5

原码:1000 0101

反码:1111 1010补码:1111 1011

用''括起来的就是字符常量:

'a' 字符a

'\0' 空字符

2.2.2 字符串常量

用""括起来的是字符串,'\0'是字符串结尾的标志

2.2.3 整型常量

整型就是类型为整数的常量,包括从负数到零到正数的所有整数。可以用二进制、八进制、十进制和十六进制表示。

2.2.4 浮点型常量

浮点型常量就是类型为浮点的常量,包括从负数到零到正数所有的浮点数。

2.2.5 指数常量

用科学计数法表示

2.5*10^-3 --> 2.5e-3

#include <stdio.h>
int main()
{
    float a = 0.0025;
    printf("%e \n",a);
    return 0;
}

2.2.6 标识常量(宏定义)

宏定义:起到标识作用的

(1)只是单纯的进行文本替换,在预处理的时候进行。

(2)遵循标识符的命名规则

(3)一般大写表示

格式: #define 宏名 常量或表达式

特点:只能单纯替换,不要进行手动运算(原样替换,替换完了再计算)

#include <stdio.h>
#define N 2
#define M N+2
int main()
{
    int a;
    a = N + M / 2+1;//2+2+2/2+1
    printf("%d \n",a);//6
    return 0;
}

3.词法符号

词法符号若干字符组成的有意义的最小语法单位。按照词法符号在程序中的作用,可以分为:关键字、 标识符、运算符、分隔符和标点符号。

3.1 关键字

是由系统预定义的词法符号,有特定的含义,不允许用户重新定义。下面是一些基本关键字:

(1)存储类型:auto(自动型) static(静态) extern(外部引用) register(寄存器)

(2)数据类型:char(字符型) short(短整型) int(整型) long(长整型) float(浮点型) double(双精度浮点型) unsigned(无符号) signed(有符号)struct(结构体) union(共用体) enum(枚举) void(空类型)

(3)控制语句:if(条件语句) else(条件语句中否定分支) while(循环语句的循环条件) do(循环语句的循环体)for(一种循环语句) switch(开关语句) case(开关语句分支) default(开关语句中其他分支) break(中断循环) continue(继续下一轮循环) goto(跳转) return(返回)

(4)其他:sizeof(计算数据所占空间大小) const(声明只读变量)typedef(重命名) volatile(防止被编译器优化)

3.2标识符

是由程序员按照命名规则自行定义的词法符号,用于定义宏名、变量名、函数名和自定义类型名等。

C语言的命名规则如下:

1) 标识符由一个或多个字母、数字或下划线组成

2)标识符的第一个字符必须是字母或下划线

3)标识符不能与任何关键字相同

注意:大小写敏感,命名有一定含义,便于记忆,增加可读性。

3.3运算符

运算符是表示运算的词法符号,C语言有非常丰富的运算符,按功能可以分为:算术运算符、 逻辑运算符、关系运算符、位运算符、赋值运算符、其他运算符

(1)算术运算符:+,-,*,/,%,++,--

(2)逻辑运算符:!,&&,||

(3)关系运算符:<,>,>=,<=,==,!=

(4)位操作运算符:&,|,~,^,<<,>>

(5)赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=

(6)其他运算符:三目运算符, sizeof()

3.4 分隔符

是用来分隔其他的词法符号,主要包括: 空格符、制表符、换行符号、注释。

通过对分隔符的恰当运用,使得代码的外观格式更为清晰易读,还可以帮助分析程序中的语法错误

3.5 标点符号

C语言中的标点符号有逗号、分号、冒号、花括号、圆括号。标点符号的作用与分隔符相似,但用法非常严格,有着明确的语法规定。有些标点符号出现在表达式中时,当作运算符使用。

(1) 逗号

在定义变量语句中,用于分隔变量名

在函数的参数表中,用于分隔函数参数

(2)分号

用于表达式语句的结束

在for循环语句中,分隔括号内的三个表达式

单独出现,构成一条空语句

(3) 冒号

用于三目运算符

用于switch case语句中case块中

(4) 花括号

用做枚举类型定义的开始和结束

用做数组初始值定义的开始和结束

用做函数体的开始和结束

用做语句块的开始和结束

用做结构类型定义块的开始和结束

(5) 圆括号

用在函数头定义中,作为参数表的开始和结束

用在流程控制语句中,作为条件表达式的开始和结束

用在函数调用中,作为参数表的开始和结束

4.运算符和表达式

(1)所谓表达式是指由运算符、运算量和标点符号组成的有效序列,其目的是用来说明一个计算过程。表达式可以独立形成语句,该语句称为表达式语句。

表达式语句的一般形式为:

表达式;

(2)运算符按功能分为:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。

4.1 算术运算符: + - * / % ++ --

(1)/: 整数相除,向下取整

(2)%: 只能用于整数运算,取余
(3)++: 自增

int a=0;

a++; //相当于 a=a+1;

++a; //相当于 a=a+1;

(4)-- :自减

a--;

--a;

都相当于a=a-1;

和打印语句结合:

printf("%d\n",a++); //++在后,先打印,再自加

//先执行printf("%d\n",a); 再执行a=a+1;

printf("%d\n",++a); //++在前,先自加,再打印

//先执行a=a+1; 再执行printf("%d\n",a);

4.2 赋值运算: = += -+ *= /=

int a=1;

(1)int b = ++a; //先自加然后再赋值

相当于:先执行a=a+1; 再执行 b=a;

(2)int b= a++; //先赋值再自加

相当于: 先执行 b=a; 再执行 a=a+1;

例如:

z = ++x + y++;

相当于:

x=x+1;

z=x+y;

y=y+1;

(3)a+=2;

相当于:a=a+2;

4.4 逻辑运算符&& || !

C语言中非0代表真,0代表假

4.4.1 && (逻辑与)

全真

全是真的才是只要就是

4.4.2 || (逻辑或)

一真

只要真的就是全都是假的才是

4.4.3 !(逻辑非)

真。

4.4.4 短路法则/截断法则

逻辑||运算中 如果前面表达式后面表达式不执行

逻辑&&运算中 如果前面表达式为假后面的表达式不执行

4.5 运算符& | ^ ~ << >>

含义

C语言

按位与

a&b

按位或

a|b

按位异或

a^b

按位取反

~a

左移

a<<b

右移

a>>b

无符号右移

/

注意负数都是补码进行运算

4.5.1 &(位与)

1100

例如

1111 0101

& 1111 1101

1111 0101

4.5.2 |(位或)

1100

例如

1111 0101

| 1111 1101

1111 1101

4.5.3 ^(异或)

不同1相同0

例如

1111 0101

^ 1111 1101

0000 1000

4.5.4 ~(取反)

按位取反0变成11变成0

例如:

~15

正数原码0000 1111

正数补码0000 1111

取反~ 1111 0000

4.5.5 <<(左移)

左移几位右边几个

8<<2 = 32: 1000左移两位得到100000

-5<<3:

-5原码1000 0101

反码: 1111 1010

补码 1111 1011

<<3:(111)1101 1000(-40)

1010 0111 (符号位不变,其余按位取反)

1010 1000 (再上一步基础上+1,得到-40的原码)

4.5.6 >>(右移)

几位左边几个符号位正数0负数1

8>>2 = 2

==>0000 0010

-5 >> 3:

-5原码1000 0101

反码: 1111 1010

补码 1111 1011

>>3: 1111 1111 (补码)

1000 0000

1000 0001 (-1的原码)

4.5.7 公式置零公式

公式 a | (1<<n)

公式 a & (~(1<<n))

4.6 特殊运算符

4.6.1三目运算符

表达式 表达式1? 表达式2表达式3

求解表达式1如果结果为真(非0)表达式2作为整个表达式取值否则(表达式1结果为假也就是0)那么表达式3的值作为整个表达式结果

4.6.2 sizeof()

sizeof运算符运算格式

sizeof(数据类型或变量名);

3.7 优先级

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值