嵌入式养成计划-3-进制转换&常量与变量&数据类型存储类型&LinuxC语言输入输出函数

十、进制

进制:按照某种计算规则,实现进位的方式
描述:逢多少进一,借一当多少
数值的构成:数码,位权,基数

十进制:
		153=1*100+5*10+3
	    1*10^2  5*10^1  3*10^0
	位权: 10^0  10^1  10^2.....
	基数:10
	数码:0---9

在这里插入图片描述

10.1 进制的表示

  • 二进制B:0b
  • 十进制D:默认不写
  • 八进制O:0
  • 十六进制H:0x

10.2 进制转换

10.2.1 十进制 与 N 进制 互转

10.2.1.1 十进制转 N 进制
  • 除以n逆向取余
    下图中十进制转二进制
    十进制转二进制
10.2.1.2 N 进制转 十 进制
  • 位权展开求和
    下图中二进制转十进制
    二进制转十进制

10.2.2 二进制 转 八进制 与 十六进制

二进制转八进制:
从后往前,每三个二进制的数算一个八进制的数,挨着往前写。

二进制转十六进制:
从后往前,每四个二进制的数算一个十六进制的数,挨着往前写。
二进制转八进制和十六进制
八进制、十六进制转二进制:
转回来也是类似的思维,逆着思考就行了。
八进制和十六进制转二进制

10.3 二进制数

  1. 逢二进一,借一当二。
  2. 分为有符号数和无符号数。
  3. 有符号数:最高位表示符号位(0表示正,1表示负数),其余为表示数值位。
  4. 无符号数:每一位都表示数值位。

此处借用Yale.patt (http://www.ece.utexas.edu/people/faculty/yale-patt)老先生出的《instruction to computing systems》第二章的图2.1。
这个地方使用的是六个bit表示的数。

6bits表示

  • 从左往右依次是无符号数,有符号数,一的补码,二的补码。
  • 一的补码国内翻译大多都是反码。
  • 一的补码国内翻译大多都是补码。

10.3.1 有符号数 与 二的补码 的转换

有符号数 ==> 二的补码 :

  • 如果是正数,这里都一样。
  • 如果是负数,那么符号位不变,其余位逐位取反,末位 + 1。

二的补码 ==> 有符号数 :

  • 如果是正数,这里都一样。
  • 如果是负数,那么符号位不变,先末位 - 1,在逐位取反。

十一、常量与变量

11.1 C 的关键字

关键字

11.2 数据类型

数据类型
在这里插入图片描述

  • 其中 long 根据系统的不同,会有不同的情况
  • 在32位系统中,long占4字节。
  • 在64位系统中,long占8字节。

11.3 存储类型

  • auto: 自动类型,默认不写就是自动类型
  • static: 静态数据类型,延长生命周期
  • extern: 外部变量
  • register: 寄存器变量 访问速度快

下面俩不属于存储类型,是修饰符
const: 修饰,值不可以修改
volatile: 保持内存的可见性

11.4 变量的定义格式

  • 值可以变的量
    存储类型 数据类型 数据名;

11.5 ASCII 码

  • 注意:这个ASCII的音标为 [ˈæski],读作 唉丝ki,不读 啊丝克!!!!!!
  • 可以通过 控制台命令:man ASCII 查看ASCII编码

在这里插入图片描述

11.6 常量

  • 常量就是值不可以变的量。
  • 数字、字符、宏这些都属于常量的范畴

11.7 宏

宏的格式:

#define 宏名 宏值

注意:

  1. 宏的位置一般在头文件的下面或者上面,有时也会写到代码块里面,看需求如何。
  2. 宏名一般为全大写的字母或字母串
  3. 宏值后不要跟分号了“;”
  4. 宏只是替换,不参与计算,也不会检查是否正确,在预处理阶段就被换掉了

十二、输入与输出

12.1 printf

头文件:	#incude <stdio.h>
格式:	int printf(const char *restrict, ...);
返回值:	int 表示输出字符的个数
printf:	函数名   系统库函数
参数:	const char *restrict   表示格式控制串

,: 	当后面存在输出列表是不可以省略
...  :	输出列表
使用格式:printf("字符串");
          printf("%d %d %ld" ,a,b,c ); //多个参数列表使用逗号隔开

12.2 scanf

注意:
	1. 结束整个scanf函数需要使用回车
	2. 在输入元素时,中间使用空格,tab,回车 也都会被认为是输入了一个字符
	3. 输入函数不要添加\n  \t
	4. 当输入字符是需要注意吸收垃圾字符 【空格、%*c】
头文件:	#include <stdio.h>
格式:	int scanf(const char *format, ...);
返回值:	int 表示输入的个数
scanf:	函数名,系统库函数
参数:	const char *format 表示格式控制串,一般是格式控制符
,:  	不可以省略
...:  	地址列表,多个地址列表之间使用逗号隔开
   
使用格式:scanf("",....);
	      int a;
	      scanf("%d",&a); 
1> 格式控制串只有格式控制符【建议】
    int a;
    scanf("%d",&a);//输入一个
    short b;
    long c;
    scanf("%d%ld",&b,&c);//输入多个
2> 格式控制串存在其他字符
scanf("a=%d,b=%hd,c=%ld",&a,&b,&c);
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    printf("c=%d\n",c);
3> 输入浮点型
	float m;//1.2
    double n;//2.333
    //输入不需要确定精度
    printf("please enter m,n:");
    scanf("%.1f %.3lf",&m,&n);
    printf("m=%.1f n=%.3lf\n",m,n);
4> 输入单字符
 	char a,b,c;
    //空格:吸收垃圾字符空格、tab\回车
    //抑制字符:%*c   可以吸收任意垃圾字符
    scanf("%c%*c%c%*c%c",&a,&b,&c);
    printf("a=%c b=%c c=%c\n",a,b,c);

12.3 getchar

格式:	int getchar(void);
返回值:	int 表示输入字符的ASCII
getchar:单字符输入函数
参数:	void  空
作用:	输入字符、吸收垃圾字符

使用格式:
		char a,b;
		a=getchar();
		b=getchar();
	char a,b,c;
    //空格:吸收垃圾字符空格、tab\回车
    //抑制字符:%*c   可以吸收任意垃圾字符
    //scanf("%c %c %c",&a,&b,&c);
	//    scanf("%c%*c%c%*c%c",&a,&b,&c);
	    
	//    scanf("%c",&a);
	//    scanf(" %c",&b);
	//    scanf("%*c%c",&c);
	printf("please enter a:");
	a=getchar();
	printf("please enter b:");
	getchar(); //吸收垃圾字符
	b=getchar();//输入
	printf("please enter c:");
	getchar(); //吸收垃圾字符
	c=getchar();
    printf("a=%c b=%c c=%c\n",a,b,c);
    putchar(a);putchar(10);
    putchar(b);putchar('\n');
    putchar(c);putchar(10);

12.4 putchar

格式:	int putchar(int c);
返回值:	int 表示输出字符的ASCII
putchar:	系统函数
参数:	int c  表示输出字符的变量名

使用格式:
	char a='S';
	putchar(a);
	putchar('S')
	putchar(10);

12.5 scanf和getchar之间的区别

1. scanf可以输入任何类型且多个,getchar只能输入单字符且一个
2. scanf属于格式解析输入,getchar输入键盘读取
3. scanf速度慢,getchar相对速度较快

12.6 printf和putchar之间区别

1. printf可以输出任何类型且多个,putchar只能输出单字符且一个
2. printf属于格式解析输出putchar输出不需要解析
3. printf速度慢,putchar相对速度较快

12.7 sizeof

用于计算变量或类型所占的字节

	size_t   sizeof(数据类型或变量);
	size_t ---->unsigned int   /long

小作业:写一个小程序,完成输入一个大写字符,输出对应的小写,以及ASCII值的功能

  • 下面是我写的
    我写的代码及运行结果

思维导图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhk___

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

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

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

打赏作者

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

抵扣说明:

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

余额充值