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

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选项:分号表示语句的结束,之后定义变量还需要重新以数据类型开始定义

(易错题)算术运算符

int a=10;

int b=a++;//b=10,a=11

printf("%d %d\n", a, ++b);//a=11,b=11

11 11

inta=10;

int b=--a;//a=9,b=9

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

输出较大值

int max=(x>=y?x:y);
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

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

int a=14,b=69;
a=a^b;
b=a^b;
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默认输出小数点后六位。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sherry的成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值