思维导图
一、进制转换
进制转换:按照某种方式实现的进制算法(十进制:逢十进一)生活中的进制:十进制
计算机的进制:二进制、八进制、十六进制
进制是有三要素:数码、基数、位权
举例:十进制 234 =2*10^2+3*10^+4*10^0
这时候:基数:10
数码:0~9
位权:10^0 10^1 10^2……
1、进制の表示
十进制D: 没有前缀
二进制B:0b
八进制O:0
十六进制H:0X
10 十进制
0b10 二进制
0664 八进制
0x10 十六进制
2、进制の转换
1.十进制转N进制
例 :十进制转十六进制
234/16——>14余10,14/16——>0得 234——>0xea
十进制转二进制
方法:除以N,拟向取余
234/2——>117余0——>113/2——>56余1——>56/2——>28余0——>28/2——>14余0——>14/2——>7余0——>7/2——>3余1——>3/2——>1余1——>1/2——>0
0100011——>1100010
2、N进制转十进制
方法:位权展开求和
拆解
例二进制0b1100=1*2^3+1^2^2+0*2^1+0*2^0=12
3、二进制转八、十六进制
口诀:小转大,求和
二进制转八进制 000~111 数值为0~7 正好八个一循环 ,三个二进制位为一个八进制位
二进制转十六进制0000~1111 数值位0~15 16个为一循环 ,则四个二进制位为一个十六进制位
例0b1101 0111 —>13 7 ——>0xd7
0b110101110101 ——>6 5 6 5——>06565
4、十六、八进制转二进制
口诀:大转小,拆解
方法如上倒过来
十六进制的编码位0~9,A~E,代表0~15。
3、认识有无符号数
有符号数:存在正负之分,最高位表示符号位(0表正,1表负),其余位表示数值位
无符号:所有位均表示数值位
1GB=1024MB
1MB=1024KB
1KB=1024Byte
1B=8bit
假设以1字节为例:
无符号数:[0,255]
最小值:00000000-->0
最大值:11111111--->255
有符号数:[-128,+127]
最小值:11111111 -->-127
最大值:01111111 ->+127
其中因为-0和0重复,选择-128为-0的补码。
4、计算机的计算
计算只有加法器,且以补码进行运算
原码:最高位表示符号位,其余为表示数值位
反码:最高位不变,其余为取反
补码:对反码加1正数原反补一样
2-5--->2+(-5)
例:
二、数据类型
数据类型:不同的数据需要使用不同的数据类型存储
优点:方便查找,存储
1、数据类型の分类
基本类型\基类型:不可以分割(整数,小数,字符,枚举)
构造类型:可以分割(数组,结构体,共用体)||构造类型只有三种,枚举是基本类型
空类型:void,多用于函数的传参和返回
指针类型:指针
2数据类型的关键字
3、常量(宏)
常量:一旦定义值不可以改变
宏的格式:#define 宏名 宏体
1.#define: 固定,预处理命令
2.宏名:满足C语言的命名规范(由数字,字母,下划线组成,不可以是关键字,不可以是数字开
头,见名知意,区分大小写)#define lNT
一般宏名大写:宏大写,变量小写,函数名驼峰下划线
MAX
max
Max
3.宏体:默认是字符串类型
4.宏:只做替换,不做计算,不做正确性的检测
5.宏发生在预处理阶段
1、整数常量
#define A 100
2、小数常量
#define PAI 3.14
3、字符(串)常量
#define CH 'a' 字符是单引号
#define STR "HELLO" 字符串是双引号
字符需要查看ascii表:man ASCll-128,127 --->0,127,共有128个字符
'A'--->65大写转换小写+32
'a'---->97 小写转换大写-32
0---->48'0'-48---->0 字符转换数字
4、变量
变量:存储数据的容器,值可变
格式:存储类型 数据类型 变量名
1.存储类型:
auto:自动类型变量,局部变量圣罗存储类型默认是auto
static:静态变量,延长局部变量的生命周期
extern:引l用外部变量
register:寄存器变量,不可以取地址操作
const: 修饰词,修饰的变量值不可变
volatile:修饰词,防止内存优化,保持内存的可见性
2.数据类型说明符:int\float\ char \double
3.变量名:满足C语言的命名规范(由数字,字母,下划线组成,不可以是关键字,不可以是数字开
头)
int a; int 1a; int float; int lNT;
float b;
三、变量初始化以及赋值の注意点
1、整数变量初始化及赋值
1、定义变量
int a;
int a,b,c;
2、变量初始化及赋值
int a; a=100;
3、整型变量的数据溢出,如果数据赋值越界则会重新回到最大值或最小值
例:int a= 2147483647;
int b= 2147483648;回到最小值
以为int是有符号整型,它的取值范围为[-2^32,2^32-1],则b赋值溢出;
同理 int c= -2147483648,同样溢出,回到到最大值
补充:补充占位符,具有对齐,占位的作用。
例:%5d 占5个位置,右对齐
%-5d 占5个位置,左对齐
%05d 占5个位置,多余位用0补充
2、浮点数变量初始化以及赋值
1、定义变量
float a;
double a,b ,c;
2、变量的初始化及赋值
float a;a=3.14;
3、输出%f.%lf都是默认输出小数点后6位
比较单精度和双精度浮点的精确性
3、字符变量初始化以及赋值
1、定义变量
2、变量的初始化及赋值
3.变量的数据溢出,若没有相对应的字符(如char d =-1)
作业
1,定义一个宏,表示一年由多少秒
2.定义宏值为'"',请输出对应的大写
定义宏值为"H',请输出对应的小写
定义宏值为"5',请输出对应的平方25
3,定义简单宏,实现两个变量的值交换
四、类型转换
1、自动类型转换
自动类型转换:低字节数据类型转换高字节
(1)char--->int/short/long/long long 1字节--->2、4、8字节
short--->int/long/long long 2字节-->4、8字节
float-->double 4字节-->8字节
2、强制类型转换
强制类型转换:高字节数据类型转换低字节
long long-->char/int/lshort/long
int---->short/char
double--->float/int/char/short
同字节转换
隐式转换:
float a=3.14;
int b=a; //b->3 小数变为整数
显示转换:
float a=3.14;
int b=a;//b->3
float a=3.9999;
int b=(int)a;//b->3
格式:(数据类型)表达式
float a=3.9999;
int b=(int)a;//b->3 单精度转换为整数
举例:int 向char/short的转换
int a=130;
char b=(char)a;
short c=(short)a;
已知a=130 int类型4字节 拆解二进制
先十转十六进制 130-->0x82(128+2)
再十六转二进制0x82-->1000 0010
int向char转换类型,最小单位为1字节:
开始计算:根据数据类型int四字节往高位添加0--> 00000000 00000000 00000000 10000010
/*a的原码:00000000 00000000 00000000 10000010
char b ,b获得a的一个字节:10000010
2转16 :0x82
b的原码:1000 0010 (char-有符号字符,取值[-128,127])
反码:1111 1101
补码:1111 1110 b:-126
short c ,c获得a的两个字节:00000000 10000010
2转16:0x0082
c的原码:00000000 10000010
反码:
补码:如上,c=130
大型网络——大端存储:高地址存储数据低位,低地址存储数据高位
PC——小端存储:高地址存储数据高位,低地址存储数据低位
3、有无符号数之间的转换
1、int/long之间
规则:把有符号数转换为无符号数进行运算
2、short/char之间
规则:把有无符号数统一转换为有符号数int
五、输入输出
1、printf
查看函数:man 3 printf
功能:C语言输出函数
使用格式:
printf("hello world");
printf("%d",100);
printf("%d%d",100,200);
2、scanf
功能:输入,输入数据是以空格\tab\回车表示数据的数据结束,回车表示scanf函数的结束
使用格式:
int a;
scanf("%d",&a);
float b c d;
double g;
short k;
/* 空格:吸收垃圾字符 空格、tab、回车
%*c抑制字符:可以吸收任意字符 */
scanf("%f%f%f%lf%d",&b,&c,&d,&g,&k);
3、getchar/putchar
getchar
功能:输入单字符,吸收垃圾字符
putchar
/*getchar
使用格式:*/
char a;
a=getchar();//输入字符变量a
char a='A';
putchar(a);//输出变量putchar('A');//输出常量
putchar(10);//ASCII中10为\n-换行
功能:输出单字符
六、运算符
运算符:算数运算、关系运算,逻辑运算,赋值运算,逗号运算,条件运算,位运算
格式:表达式1 运算符 表达式2
1、算数运算
+ | 如果运算符的两端表达式都是整数,则最终结果一定是整数 | 如果运算符的两端表达式有一个小数,则最终结果一定是小数。 |
- | 如果运算符的两端表达式都是整数,则最终结果一定是整数 | 如果运算符的两端表达式有一个小数,则最终结果一定是小数。 |
* | 如果运算符的两端表达式都是整数则最终结果一定是整数。 | 如果运算符的两端表达式有一个小数,则最终结果一定是小数。 |
/ | 如果运算符的两端表达式都是整数则最终结果一定是整数。5/2=2 | 如果运算符的两端表达式有一个小数,则最终结果一定是小数。5.0/2=2.5 |
%取余 | 运算符的两端只能是整数,否则报错 | 5%2=1 5.0%2 error |
++加1 | 后缀运算,先运算后自增 | |
只能对变量操作a++ | 前缀运算,先自增后运算 | |
--减1 | 后缀运算,先运算后自减 | |
只能对变量操作a-- | 前缀运算,先自减后运算 |
2、关系运算
> | 条件成立则为1,假为0 |
>= | 条件成立则为1,假为0 |
< | 条件成立则为1,假为0 |
<= | 条件成立则为1,假为0 |
== | 条件成立则为1,假为0 |
!= | 条件成立则为1,假为0 |
3、逻辑运算
!> && >|
真:非0假:0
格式:表达式1&& 表达式2
&&逻辑与(且) | 1 && 1=1 1 && 0=0 0 && 1=0 0 && 0=0 | 遇假则假,全真为真 |
逻辑或(或者) | 11l 1=1 11 0=1 0 ll 1=1 0 l1 0=0 | 遇真则真,全假为假 |
!逻辑非 | !0=1 !1=0 | 非假即真,非真即假 |
//判断变量char a是大写 65--90
a>=65 && a<=90a>='A' && a<='Z
//判断变量char a是小写
a>='a' &&a<='z
//判断变量char a是数字
a>='0' && a<='9
//判断特殊字符
(a>='A' && a<='Z'| a>='a' &&a<='z'| a>='0' && a<='9')
4、条件运算\三目运算
格式:表达式1?表达式2:表达式3
1.表达式1:条件
2.表达式2:如果表达式1条件成立,则执行表达式2
3.表达式3:如果表达式1条件不成立,则执行表达式3
例1、输出一个输入数的立方
2、找到水仙花数
#define C(s) s*s*s
{
char ch;
printf("please enter the ch:")
ch=getchar();
if(ch<58&&ch>47)
{
int b=(int)ch;
b=b-48;
b=c(b);
printf("%d\n".b)
}
else
printf("%d\n",ch );
int num;
printf("please enter number:");
scanf("%d",&num);
inta,b,c;
a=num/100;b=num%10:c=num%100/10;
a=C(a);b=c(b);c=C(c);
if(num>99&&num<1000&&num==a+b+c)
printf("%d\n",num);
else
printf("no\n");
return 0;
}
5、赋值运算
int a=10
a+1 a的值不变
a+=1
=基本赋值 | a=10 a=b a=b+2 | 把10赋值给变量a,=号的左边只能是变量,右边可以是变量常量表达式 |
+=复合赋值 | a+=2+3 -->a=a+(2+3) | |
a-=2+3--->a=a-(2+3) | ||
a*=2+3--->a=a*(2+3) |
a的值改变
a++ a的值改变
6、逗号运算
逗号运算:是所有运算符优先级最低的一种运算格式:
(表达式1,表达式2,表达式3.….表达式n)
1.最后一个表达式是最终的结果
2.每个表达式均执行
int a=10;
int b=(a++,++a,a+20,a/3);
printf("a=%d b=%d\n",a,b);
7、位运算
& 按位与 | 1&1=1 1&0=0 0&1=00&0=0 | 有一个0,则结果为0 |
|按位或 | 1|1=1 1|0=1 0|1=1 0|0=0 | 有一个1,则结果为1 |
^异或 | 1^1=0 1^0=1 0^1=1 0^0=0 | 相同为0,不同为1 |
~取反 | ~0=1 ~1=0 | 0取反1,1取反0 |
>>右移 | 右移一位除以2 8>>2=2 | 右边多余位舍去,左边最高位是0则补0,是1则补1 |
<<左移 | 左移一位乘以2 8<<2=32 | 左边多余位舍去,右边补0 |
8、运算符的优先级
括号>单(单日运算)>算(算数运算)>移(左移右移)>关(关系运算)>与(按位与)>异或>逻(逻辑)>条(条件)>赋值>逗号
详情看百度