D2.数据类型、常量、变量及运算符

本文详细介绍了C语言中的数据类型,包括基本数据类型如bool、char、short、int、float和double,以及常量的分类和表示方法。还讨论了变量的声明、存储类型和运算符,包括算术、关系、逻辑和位运算符。此外,还提到了宏定义和常量的使用,以及预处理的概念。
摘要由CSDN通过智能技术生成

目录

2.1数据类型上

1.基本数据类型

(1)bool类型

2.2数据类型下

(2)char类型(字符型)

(3)short类型(整形)

(4)int类型(整形)

2.3常量

1.整形常量

2.浮点常量

(1)一般形式

(2)指数常量

3.字符常量

4.字符串常量

5.标识常量

案例

2.4变量一

1.变量的基础

(1)变量的说明

(2)变量的存储类型

2.5变量二

2.6运算符一

1.算数运算符

2.关系运算符

3.逻辑运算符

2.7 运算符二

4.位运算符

(1)位逻辑反

(2)位逻辑与

(3)位逻辑或

(4)位逻辑异或

4.1位移位运算

2.8运算符三

题目

2.9运算符四

1.赋值运算符

 案例

2. C语言的特殊运算符

(1).三目运算符

(2).逗号运算符

(3). sizeof运算符

3.C运算符的优先级




新加:常量

%d输入或输出整型(有符号的整型就是int类型)

%ld

%c字符型

%u无符号整型     以上是十进制

%x十六进制   内存很大的时候用十六进制输出

%s输出字符串

%f输出单精度浮点数

%lf双精度

1.宏

原样替换

1.1基础应用

#define P 3.14      P是给宏起的名字  起名字起英文字段  给3.14这个字段起名字  就是用P替换3.14

宏=原样替换

%s输出字符串

const常量

要点:const关键字  常量

限定一个变量不允许被改变,产生静态作用。

如:

const int Max=100;

Max++;//会产生错误

1.2嵌套宏

1.3宏函数

要点:宏  函数

变量

1.变量的数据类型

1.1字符变量

//1.定义

char a;

//2.定义并初始化

char a = 'a';

//3.赋值

a ='b';

1.2整型变量

//1.定义

short a;

int b;

long c;

//2.定义并初始化

int b = 5;

//3.赋值

b = 1;

1.3浮点变量

//1.定义

float a;

double b;

//2.定义并初始化

float c = 5.5;

//3.赋值

c = 1.1;

静态全局变量、全局变量、静态局部变量、自动局部变量

vsp是在底行模式下可以再编辑另外一个文件

tail查看文件的内容

2.1数据类型上

能存储负数的叫有符号数   signed

无符号数(只能存储正数>=0)  unsigned

构造类型(用户自定义的数据类型)

实型 float double 可以存小数

1.基本数据类型

逻辑类型。只有两个量true(条件成立)和false(表达式不成立),表示逻辑真值和逻辑假值。

整数类型。包括char,short,int和long。(char字符型可以是某种形式的整形)

浮点类型。包括float和double。

void类型。主要用于说明不返回值的函数指向  (    ) 类型的指针等。

(1)bool类型

          (<stdbool.h>) (_Bool基本类型)

例如,

if(-1)

        x=12;

else

        x=18;

上面0.5是非零数值,逻辑值为真,所以x赋给的(      )

C语言的数据类型  ctype

bool不是基本数据类型 所以要引入头文件

bool型要引入头文件 #include <stdbool.h>

 预处理:gcc -E bool.c -o bool.i (就是把宏作为展开)

宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串。

C语言中,预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白符号。

 _Bool 是C语言中的基本类型。不需要头文件。但是true和false是在这个(#include <stdbool.h>)头文件定义的如果代码中用true和false是要用到这个头文件的。bool的宏也是在这个头文件定义的。

true和false的值就是0和1  非零为真。

2.2数据类型下

(2)char类型(字符型)

     sizeof(对用的环境进行常见的测试)

     现在以32位系统为例给的数据

signed char 能存正数也能存负数

unsigned char 只能存正数

  •  使用char数据类型的变量需要特备注意,防止数据超出值域,思考
  • char  c1 = 128;      //出错,数据越界(-128)
  • char  c1 = 129;      //出错,数据越界(-127)
  • unsigned char c2 = -1;//出错,数据越界(255)

无符号数的范围[ -128,127 ]

-127 原 11111111

        反 10000000

        补 10000001

 -128的补码是 10000000

+127 01111111

-1 原码 10000001

    反码 11111110

     补码 11111111

(3)short类型(整形)

     <limits.h>(可以看几个类型的边界值)

     可存负数

65535=16个1=10x10^7=2^16-1

(4)int类型(整形)

    可存负数

 0~2^32-1(就是4G的空间)

(5)浮点类型

float  是%f  double 是 %lf

2.3常量

1.整形常量

如10,-1,245

常量是指在程序运行期间其数值不发生变化的数据。整形常量通常简称为整数。

整数可以是十进制数、八进制数和十六进制数。例如十进制的数值3356可以有下列两种不同的表示形式:

  • 八进制数  06434  (0表示八进制)    八进制一个数对应三个二进制位
  • 十六进制数  0xd1c(0x表示十六进制) 十六进制的一个数对应四个二进制位

2.浮点常量

浮点常量又称为实数,一般含有小数部分。

在C语言中,实数只有十进制的实数,分为单精度和双精度。实数有两张表示方法,即一般形式和指数形式。

(1)一般形式

一般形式的实数基本形式如下:

  • 例如,3.5,-12.5,3.1415926

[+|-]M.N 形式

(2)指数常量(科学计数法)

指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。当一个实数的符号为正好时,可以省略不写,其表示的一般形式如下:

-  1.176e+10 表示 1.176x10^10

-  -3.5789e-8 表示 -3.5789x10^-8

-  通常表示特别大或特别小的数

[+|-]M.N <e|E> <+|->T

3.字符常量

‘\0’  是 0    ‘\n’是10   空格SPACE是32   0 是48

字符常量是指一个单一字符,其表示形式是由两个引号包括的一个字符。

 单引号引起来的都是一个字符 要用单引号引起来

在C语言中,字符常量具有数值。字符常量的值就是字符的ASCII码值。

可以把字符常量看做一个字节的正整数。

 字符型常量 ch

 大小写字母是32

字符0和数字0是48

4.字符串常量

字符串常量是指用双引号括起来的一串字符来表示的数据。(字符串以\0结尾)  "9"就是 '9','\0'

字符串默认包含结束标志尾‘\0’,是转义字符,不显示

  • "Hello!","StudentS","9","LINUX","李四"
  • "北京海淀城府路***号","姓名:","****@163.com"," "

5.标识常量

标识常量是指用标识符代替常量使用的一种常量,其名称通常是一个标识符。

标识常量也叫符号常量,一般用大写英文字母的标识符。(就是宏)

在使用之前必须预先定义。说明形式为:

#define <标识常量名称>(或者叫符号常量或者叫宏的名称) <常量>

例如

#define MAX        50

#define PI             3.1415926

#define MULL       0

#define EOF         -1

#define ERROR   -1

  • 其中,MAX、PI、NULL、EOF和ERROR都是标识常量,它们代替的常量分别是50、3.1415926、0、-1和-1。
  • 一般情况,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。

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

#define ONE 1

#define TWO ONE+ONE

#define THREE ONE+TWO

如果一个串长于一行,可以在行尾用反斜线“\”续行

#define LONG_STRING"This is a very very long \

String that is used as an example"

是原样替代  c = ONE + TWO * b + a    变成 1+1+1*20+10=32

如果想算出来要加括号()

宏运算规则原样展开

案例

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

n*950/3.0*10^-23

编程:water.c

2.4变量一

1.变量的基础

变量在程序中用变量名表示。变量名由用户根据其用途任意命名。

变量名由字母、数字、下划线组成,不能以数字开头,不能和C的关键字重名。

在程序运行时,变量占据存储空间的大小由其数据类型决定。

变量在内存空间中的首地址,称为变量的地址。

(1)变量的说明

变量在程序中使用时,必须预先说明他们的存储类型和数据类型。

  • 变量说明的一般形式是:

<存储类型><数据类型><变量名>

  1. <存储类型>是关键词auto(默认的)、register、static和extern
  2. 自动:auto(可以不写)  静态:static  寄存器:register    外部:extern(静态存储)        局部变量、全局变量、外部变量、静态局部变量
  3. <数据类型>可以是基本数据类型,也可以是自定义的数据类型

(2)变量的存储类型

1.auto说明的变量只能在某个程序范围内使用(局部),通常在函数体内或函数中的复合语句里。(默认是随机值)

在函数体的某程序段内说明auto存储类型的变量时可以省略关键字auto,如下:

  • auto int k;
  • int j;
  • double x;

2.registet称为寄存器型(寄存器变量),register变量是想将变量放入CPU的寄存器中,这样可以加快程序的运行速度。

如申请不到就使用一般内存,同auto;

注意:register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度小于或者等于整形的长度。

不能用“&”来获取register变量的地址。

由于寄存器的数量有限,真正起作用的register修饰符的数目和类型都依赖于运行程序的机器。

2.5变量二

3.static变量称为静态存储类型的变量,既可以在函数体内(局部),也可以在函数体外(全局、)说明。(默认是0)

(可以修饰全局变量也可以修饰局部变量)

局部变量使用static修饰,有以下特点:

  • 在内存中以固定地址存放的,而不是以堆栈方式存放
  • 只要程序没结束,就不会随着说明他的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的函数值。

4.extern

当变量在一个文件中的函数体外(全局变量)说明,所有其他文件中的函数或程序段都可引用这个变量。(全局变量能被其它文件所访问)

extern称为外部参照引用型,使用extern说明的变量是想引用在其他文件中函数体外部说明的变量。

static修饰的全部变量,其它文件无法使用。

2.6运算符一

1.算数运算符(:%s/是全文替换   :%s/%d/%s/g)

C提供的算数运算符:+、-、*、/、%、++,如下:float/double不能取余(没必要做取余的操作)

例如,

int a=15,b=8,c;

double x=15,y=8,z;

c = a + b; c = a - b; c = a * b; c = a / b;//c赋值为

c = a % b;  // c赋值为

z = x + y;  // z赋值为

z = x - y;  // z赋值为

z = x * y;  // z赋值为

z = x / y;  // z赋值为

z = x % y;

2.关系运算符

C语言的关系运算符如下:

 

3.逻辑运算符

C语言的逻辑运算符如下:(逻辑反也叫逻辑非)

 逻辑与“&&”运算符的运算规则如下:短路特性-逢0截止

 逻辑或"||"运算符的运算规律如下:短路-逢1截止

 

2.7 运算符二

4.位运算符

(1)位逻辑反

C语言的位运算符如下:

例如:

unsigned char x=0x17,y;

y = -x;

分析:

(1是 0 0 0 1        7是 0 1 1 1        17是0001 0111  这是x    y是x取反   无符号数不分符号位

所以y是1110 1000     1110是E 1000是2^3=8   结果是0xE8)

计算机内存中的x内容如下:

0 0 0 1 0 1 1 1

y被赋值后计算机内存中的内容如下:

1 1 1 0 1 0 0 0

x代表十六进制 #代表打印结果时自动加上0x前缀

(2)位逻辑与

位逻辑与“&”运算符的运算规律如下:

 例如,

unsigned char x=0126,y=0xac,z;z = x & y;

6是110 2是010 无符号数是八位再补两个0     a是1010 b是1011 c是1100

01010110

10101100

进行与运算时上下两个都是一的才是一

结果是0x04

(3)位逻辑或

位逻辑或“|”运算符的运算规律如下:

 例如:

unsigned char x =076,y=0x89,z;

 z = x | y;

(4)位逻辑异或

位逻辑异或“^”运算符的运算规律如下:(相异位真)

 例如:

unsigned char x=75,y=0173,z;

z = x ^ y;

 0x30

4.1位移位运算

位移位运算的一般形式:

<运算量><运算符><表达式>其中:

  • <运算量>必须为整形结果数值;
  • <运算符>为左移位(<<)或右移位(>>)运算符;
  • <表达式>也必须为整形结果数值。

例如:

unsigned char a=0xe4,b;

b=a<<3;(b等于a左移3位)

 如:

unsigned char a=0x4,b;

b=a<<1;

b=a<<2;

b=a<<3;

0x4是00000100   是4

<<1是1000           是8

<<2是10000         是16

所以左移是乘2的关系

2.8运算符三

题目

  • 如何把一个无符号数的某位快速置1?

            主要通过或运算来完成

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

            与运算                

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

            转十六进制就是除以16   

           a/16(对十六取整)  (位运算左移一位是乘2 除以16就是右移四位)

           a%16(对十六取余)(16的余数是0~15   0到15相当于四个二进制位可以理解为一个数的             最后四位)

            

                  f是00001111

2.9运算符四

1.赋值运算符

赋值运算符为“=”,其运算的一般形式如下:

<左值表达式>=<右值表达式>

赋值复合运算符其运算的一般形式如下:

<变量><操作符>=<表达式>

 案例

 

2. C语言的特殊运算符

(1).三目运算符

条件运算符“?:”

是三目运算符,其运算的一般形式是:

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

(相当于if语句)

【if(表达式1)       表达式1如条件成立就取表达式2如果条件不成立就取表达式3

     表达式2

     else

     表达式3】

例如:

int x=82,y=101;

x >= y ? x+18:y-100   //运算结果为1

x < (y-11) ?x-22:y-1    //运算结果为60

(2).逗号运算符

一般有圆括号,最后一个式子的值赋给等号左面

 

 z1=15.7        z4=3

程序里面浮点数最后printf("x=%f")

(3). sizeof运算符

运算的一般形式:sizeof(<类型或变量名>)

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

例如:

sizeof(double)

sizelf(long)

3.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 

(逗号的优先级是最低的   大于号>等号>逗号    z得到的是布尔值是真值  所以z=1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值