基本数据类型与运算符 查漏补缺

简介: 基本数据类型与运算符 查漏补缺

1.反斜杠\  字符转义的含义

‘\’’表示单引号字符,单引号表示字符分界符,双引号表示字符串分界符

2.字符串以反斜杆0为结尾

“abc” ‘a’‘b’‘c’‘\0’

3.定义变量 数据类型 标识符=数值

标识符只能够由字母,数字,下划线组成,不能够由数字开头,不允许是关键字,同一作用与不允许重名

4.字节是内存的基本单位,一个字节是八位二进制

有符号整型  原码 -(2^31-1)--  2^31-1   补码 -2^31--2^31-1

原码


1111 1111 1111 1111 1111 1111 1111 1111    -(2^31-1)  min

-                                       1

=0111 1111 1111 1111 1111 1111 1111 1111   max

=2^31-1

补码 -2^31--2^31-1

1 0000 0000 0000 0000 0000 0000 0000 0000

-1

=1111 1111 1111 1111 1111 1111 1111 1111

无符号整型 0--2^32-1

5.= 赋值运算符的左边需要存储空间,不能是表达式

a-b=5  ✘

6.  8.666f表示的是单精度浮点型数字8.96e1f表示单精度浮点型的指数形式,默认是双精度  默认小数点后六位

7.数据溢出

int a=4.6    输出4,小数点儿之后丢失

8. <stdio.h>输入输出工具箱

%c 字符型占位符

9.scanf 以回车结束,%c占位符的数字以空格结束

ch=getchar() 输入一个字符

putchar(字符常变量)输出一个字符

10.符号常量 const 数据类型 变量名=数值(变量的值就不能改变)

11.(二进制转八进制)-三位二进制对应一位八进制

10111010(B) =                  

010 111 010   272(H)

11001111(B) =            

011 001 111    317(H)

(八进制转十六进制)-先将八进制转换为二进制,再转换为十六进制

351(O) = 011 101 001(O)=  E9

例题一

以下全部属于浮点型数据的选项是(      )  

A. 123e-2、.123、987.0f

B. 0x123.45、1.23e0f、0.0

C. 123f、0.001、987.

D. 1.2e1.2、0123.45、x123.45

答案解析:A

B选项:实型只有十进制形式。0x123.45不合法

C选项:123f,f不能放在十进制的整数后。

D选项:1.2e1.2指数不能为小数,x123.45不合法

例题二

以下定义语句中正确的是(      )  

A. int a=b=0;

B. char a=65+1,b='b';  正确答案

C. float a=1,b=a,a=c;

D. double a=0;b=1.1;

答案解析:B  字符型本质也是整型,储存的是ASCLL码值

A选项:变量b需要先定义再使用。

C选项:变量c需要先定义再使用。

D选项:分号表示语句的结束,之后定义变量还需要重新以数据类型开始定义

(易错题)算术运算符

1. int a=10;
2. 
3. int b=a++;//b=10,a=11
4. 
5. printf("%d %d\n", a, ++b);//a=11,b=11

11 11

1. inta=10;
2. 
3. int b=--a;//a=9,b=9
4. 
5. printf("%d %dn", a, b--);//a=9,b=8,b--=9

9 9

12.关系运算符得到的是 0或1

int x=a==b   x=0

13.逻辑运算符 :与 或 非 异或

异或:输入相同为0,输入不同为1

与的优先级高于或

int x=(1!=2)||(2==3)&&(3!=4);

但是左边已经为真,遇到或直接为真,所以计算机可能先计算优先级低的

14.条件运算符:表达式1?表达式2:表达式3

输出较大值

1. 
int max=(x>=y?x:y);
2. printf("%d",max)

15.位运算符

左移a<<n  =a*2^n       10(D)=1010(B)     n=3   1010000=10*2^3=80  乘n个2

右移a>>n  =a/2^n      除n个2

按位取反~   0变1,1变0

(反码:由原码符号位不变,其他0变1,1变0;补码=反码+1)

~3

0000 0000 0000 0000 0000 0000 0000 0011 3的补码

1111 1111 1111 1111 1111 1111 1111 1100  取反后补码-1

1111 1111 1111 1111 1111 1111 1111 1011  反码

1000 0000 0000 0000 0000 0000 0000 0100 -4 原码

按位与&  操作数1&操作数2 全1为1,有0为0

(&变量名  取地址)

按位或|   操作数1|操作数2 全0为0,有1为1

13|10

1101   1010     1111=15

按位异或^     操作数1^操作数2  相同为0,不同为1

可以使用按位异或交换两个整数的值

1. int a=14,b=69;
2. a=a^b;
3. b=a^b;
4. a=a^b;

16.隐式转换(要注意在运算时使用数字的要求,否则可能得不到想要结果)

17.强制转换

float score=89.5f;
int grade=(int)(score);
printf("%d",grade);//89
printf("%lf",1/2*3+4.5);//4.500000

注意grade的类型还是float,但要考虑有数据丢失的后果

18.空语句

;(让计算机什么都不做)

19.复合语句

{}

(易错点)赋值运算符与关系运算符

a=0(把0赋给a)赋值号的左边需要存储空间,不能是表达式

a==0(判断a是否为0)

例题一

若所有变量已正确定义并赋值,则以下正确的C语言表达式是(      )   。

A. 12.5%3

B. a=b=c*2

C. ++i++

D. a+=b+c=2*3


答案解析:B

A选项:%作为求余运算符两边的操作数必须是整数。

C选项:++作为自增运算符,优先级是二级,在优先级相同的情况下结合性是从右到左,所以++i++会先计算i++,但是++的操作数是变量(存储单元)。而i++是一个有运算符的表达式,i++表示的是一个表达式的结果而不是一个变量(存储单元),所以计算机不能对i++做自增运算。++i++也就是++(i++)不合法。

D选项:赋值号(=)的左边必须是一个 一个变量(存储单元),不能是有运算符的表达式,b+c不能在赋值号的左边。

 

例题二

以下程序的运行结果为(      )   。

#include<stdio.h>

int main()

{

     int a = 1, b = 6, c = 2,d = 5;

     float e;

     e = (a + b) / c + (float)(d/c);

     printf("%f\n", e);

     return 0;

}


A. 6

B. 5.5

C. 5

D. 5.000000  

答案解析:D

表达式的运算规则:隐式转换(char->int->float->double、short->int->float->double)

(a+b)/c是整型除以整型,所以该表达式的结果是整型;


(float)(d/c)表达式:先算圆括号中的d/c,再将d/c表达式的结果强制转换成float类型。


所以,e的值是5.0f。使用%f默认输出小数点后六位。



相关文章
|
7天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1172 3
|
6天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
856 12
|
16天前
|
人工智能 运维 安全
|
5天前
|
机器学习/深度学习 物联网
Wan2.2再次开源数字人:Animate-14B!一键实现电影角色替换和动作驱动
今天,通义万相的视频生成模型又又又开源了!Wan2.2系列模型家族新增数字人成员Wan2.2-Animate-14B。
452 10
|
7天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
329 0
|
14天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!