c语言第一章------数据类型、运算符与表达式

一、数据类型

  • 基本类型:整型–int、字符型–char、实型(浮点型)–单精度实型float,双精度实型double
  • 构造类型–数组类型–[ ],结构类型–struct,联合类型–union,枚举类型–enum
  • 指针类型–*
  • 空类型(无值类)–void

二、常量

不能改变的量

  • 整型,100,0,-10
  • 实型,3.12,0.1125,-3.21
  • 字符型,‘a’, ‘2’,必须单引号,里面必须有字符
  • 字符串型,“a”, “ab”,“1c23”,必须双引号,里面没有字符就是空串

三、变量

代码段在执行时候只读,不可写。
在这里插入图片描述

  • 匈牙利命名法,见名知意。大驼峰命名法。(自己看自己的代码很容易看不懂)

四、整型数据

1.符号常量

  • 下面的sun不能修改,因为#define定义了sun=7,下面相当于7=3 ?,不行吧!!!符号常量不能修改。

在这里插入图片描述

2.整型常量的不同进制表示

  • 计算机只存储二进制,即0和1,对应物理硬件上是高低电平。
  • 一个字节=8位,1位即二进制的1位,存储0或1.
  • int型,大小为4个字节,32位。
  • 设有二进制数:0100 1100 00111 0001 0101 0110 1111 1110, 其最低位是2的0次方,最高位是2的30次方,最高位是符号位
  • 上面对应八进制数:011414253376,它以0开头标识,数位的变化范围是0-7. 二进制转8进制方法:对应的二进制数每三位转换成一位八进制数。实际编程时,识别八进制数时要在前面加0.
  • 上面对应十进制数:1278301950
  • 上面对应十六进制数0x4C3156FE, 它以0x开头标识。数位变化范围是0-9,A-F,A代表10,F代表15. 对应二进制数每4位转换一位十六进制数。

3.补码

  • CPU中只有加法器,无减法器。。。
  • 补码=原码按位取反+1
  • i=-5;原码:0000 0000 0000 0000 0000 0000 0000 0101
    ,反码1111 1111 1111 1111 1111 1111 1111 1011,程序中存储:0xff ff ff fb
  • 2-5相当于2+(-5),即0000 0000 0000 0000 0000 0000 0000 0010+1111 1111 1111 1111 1111 1111 1111 1011,按位相加,得:1111 1111 1111 1111 1111 1111 1111 1101=0xff ff ff fd,即-3(最高位是1,为负,先输出-,再按位取反加一得3,即-3)
  • 加一取反,和减一取反一样,在二进制中,二进制特有的属性

4.整型变量

在这里插入图片描述

  • 缺省的意思就是默认,写与不写都行。

  • 在这里插入图片描述

  • 有符号整型数的第一位(最高位)代表符号位

  • 32位的long型是4个字节,64位是8个字节

  • int型占4个字节,最高位是符号位
    ,就剩下31位了,20–230

  • Max->全1:0111 1111 1111 1111 1111 1111 1111 1111,1x20+1x21+1x22+…1x230= 231-1 ,21亿多

  • Min–>最大的是-1,最小的原码:1000 0000 0000 0000 0000 0000 0000 0000 ,反码:1111 1111 1111 1111 1111 1111 1111 1111补码:1 000 0000 0000 0000 0000 0000 0000 0000(特殊规定)=-231.负数从1111 1111 1111 1111 1111 1111 1111 1111~1000 0000 0000 0000 0000 0000 0000 0000,即从-1到-231

  • 下面是我对这个范围的两个理解:

  1. 假设int型用两个字节表示
    对于有符号的整数,用补码表示的话,最高位是符号位,后面15位用来表示数据.
    1.正数,表示的范围为0000 0000 0000 0001-0111 1111 1111 1111,最高位是符号位,不能用于表示数据,所以正数的数值范围为1~32767.
    2.0:0000 0000 0000 0000
    3.负数,负数的补码是原码取反加1,CPU的加减法运算,是循环进行加减的,即当其由0000 0000 0000 0000加到1111 1111 1111 1111时,如果再加1,就又会为0000 0000 0000 0000了,此时溢出寄存器会置位.而当其由0000 0000 0000 0001减1,即为0000 0000 0000 0000,如果再减1,就会为1111 1111 1111 1111,这就是-1。那么,从0000 0000 0000 0000可以减到什么时候呢?当然是不能与正数的补码重合的,所以可以从1111 1111 1111 1111~1000 0000 0000 0000,即从-1到-32768.

所以,数值范围是-32768~32767.

  • 来看原码的正0和负0:0000000000000000和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。所以,人为规定1000000000000000这个补码编码为-32768。

五、浮点型数据

5.1浮点型常量

  • 工作中常用指数,e代表10的幂次
    在这里插入图片描述
  • printf("%f\n",f);

5.2浮点型变量

  • float-4个字节,double-8个字节
    在这里插入图片描述
  • 浮点型变量存储,IE-754标准:

在这里插入图片描述

六、字符型数据

1.字符型常量

  • ''里面只能有一个字符,空格的ASll值为32,可以放空格里面
  • char c=65;相当于char c=‘A’
  • 字符的输入是一个查表的方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • GBK 两个字节

  • A–65,a–97, 0-9:48-57
    在这里插入图片描述

  • printf(“abc\rd\n”);

  • 一开始是abc,后来是dbc,如果是dabc,那就是txt编辑器干的。

  • 只要双引号,都是字符串

2.原理

  • 把一个字符常量放入字符型变量中,其实是把该字符的ACSCII值放到存储单元。
  • 打印时,计算机先从ASCII表中查找字符型变量的ASCII码值,查到后会显示对应的字符。%c–字符,%d–ASCII值
  • 对于字符型变量,无论赋的是ASCII码值还是字符,或是运算,只要%c,打印出来的都是字符,使用%d打印输出的都是ASCII值

七、字符串常量

  • "" 里面啥都没有也是字符串常量,空字符串
  • 没有关键字定义
  • 不能将字符串型常量赋给字符型变量
    在这里插入图片描述

八、混合运算在这里插入图片描述

在这里插入图片描述

  • 数值按int型(默认4个字节)运算
  • 浮点型常量按double型(默认8个字节)运算,
  • 5/2=2,5/2.0=2.500000

九. 常用的输入/输出函数

1.scanf函数的原理

  • 任何在缓冲区里的东西都是字符,scanf会转换显示在屏幕上
  • 我们输入的字符先放到换缓冲区中,回车换行时才进行实际的I/O操作

在这里插入图片描述

  • \n也是字符

- List item

  • scanf %f %d发现有\n 空格,会忽略(行缓冲)

  • scanf %c 不忽略
    在这里插入图片描述

  • \n 缓冲区刷新

2.scanf的循环读取

  • scanf()的返回值时输入成功的数量
  • EOF=-1
while(scanf("%d",&i)!=EOF)//正确输入2:1!=-1,逻辑对的,继续循环
	{
    
    						//ctrl+z:0!=-1,进入循环,运行完再进行判断
	|2\na\n|			//输入a的时候,不匹配,打印一个3,此时缓冲区还是有2a\3
	printf("3\n",i);
	}
  • 因此需要输入一次scanf(),再刷新一次scanf()缓冲区
  • fflush(stdin)都是windows下,清除缓冲区
  • 2017-2019用:rewind(stdin)

这下会卡住:在这里插入图片描述

正确的方法:在这里插入图片描述

3. 多种数据类型混合输入

  • 读取字符时,不会忽略空格和’\n’(回车符),因此要在%c前加一个空格
  • scanf("%d %c%f",&a,&b,&c)
    在这里插入图片描述
    在这里插入图片描述

4.getchar函数

  • 每次只读一个字符

在这里插入图片描述

5.printf函数

  • %-5.2f,至少显示5位,且2位小数,左对齐
  • %03d,占3位,不足补0

10.运算符与表达式

在这里插入图片描述

  • 0代表假,非0即为真
    在这里插入图片描述

左移是乘2在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 后加加,先去掉++,再运算,分两步
  • 前加加,按照优先级

猜你喜欢

转载自blog.csdn.net/weixin_43722052/article/details/114139360