算法的进制转换+数据类型+运算符

思维导图

一、进制转换

进制转换:按照某种方式实现的进制算法(十进制:逢十进一)生活中的进制:十进制

计算机的进制:二进制、八进制、十六进制

进制是有三要素:数码、基数、位权

举例:十进制 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、运算符的优先级

括号>单(单日运算)>算(算数运算)>移(左移右移)>关(关系运算)>与(按位与)>异或>逻(逻辑)>条(条件)>赋值>逗号

详情看百度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值