学习嵌入式Day02

运算符

1.1逻辑运算符

与  :&&         全真则真,有假则假;

或  :||            一真则真,全假则假;

非  :!             非真即假,非假即真;

判断是否成立,输出结果为0(否)或1(是);

终端验证条件是否成立

printf("%d\n",118>99); //  条件成立输出     1

printf("%d\n",18>99);   //  条件不成立输出 0

printf("%d\n",118>99 && 5>9 ); //  输出 0

printf("%d\n",118>99 || 5>9 );    //  输出 1

printf("%d\n",!(118>99) || 5>9 ); //  输出 0

 0为假,非零为真

printf("%d\n",5&&6);              //    1

printf("%d\n",(10/2)&&6);       //    1

printf("%d\n",(10/2==5)&&6); //    1

 截断法则   

             逻辑与运算中前边表达式结果为后边表达式不再执行返回假;

             逻辑运算中前边表达式结果后边表达式不再执行返回真;

例:

       解析:

         (m=a>b)为假,后面表达式不再执行,则n=2;

1.2位运算符

位与:&    位或: |    异或: ^      取反:~     左移: <<     右移:  >>

&  1100

|    1100

 异或相同为0,不同为1

int a=6,b=10;                          将6和10换算为二进制数:

int c=a&b                                  //6 : 0110     

                                                         ↓↓↓↓       按位比较

printf("%d\n",c);//输出2             //10:1010       全1则1,有0则零

                                                         ↓↓↓↓ 

                                                 //&:  0010换算为十进制数→→2

负数运算

整数补码的二进制进行存储、计算

原码

反码

补码

正数

相同

相同

相同

负数

相同

原码符号位之外其他按位取反

反码+1

int a=-6,b=10;

int c=a&b;

printf("%d\n",c); //10

int 4字节 = 32

-6原码: 最左边表示符号位 0正数 1负数

     1000 ... 0110

-6反码

      1111 ... 1001

-6补码

      1111 ... 1010

10补码

      0000 ... 1010

-6补码 & 10补码

      1111 ... 1010

      0000 ... 1010

      0000 ... 1010 补码     10

~ 取反

1-->0 0-->1

int a=-6;

int c=~a;

printf("%d\n",c); //5

-6原码:                           最左边表示符号位 0正数 1负数

      1000 ... 0110

-6反码

      1111 ... 1001

-6补码

      1111 ... 1010

~  取反:

      0000 ... 0101 === 5

<<左移

左移几位右边几个0

int a=6<<2;          //6转成二进制→110左移两位→11000

printf("%d\n",a);   //11000===24

右移两位也可这么计算:

     6*2^2=24

    -6*2^2=-24

X右移n位,即:结果=X*2^n

>>右移

右移几位右边丢弃几位

6>>2              //6转成二进制→110再右移→001

6/2^2=1

1.3关系预算符

大于:>       大于等于:   >=      小于:<         小于等于:<=         

等于:==       不等于:!=  

1.4 三目运算符 (条件运算符)

表达式1 ? 表达式2 表达式3

int a=3,b=5;

int max=a>b?a:b;            判断表达式1是否成立,成立执行表达式2,不成立执行表达式3;

printf("%d\n",max);    //5

1.5 赋值运算符

赋值:=       加等:+=        减等:-=        乘等:*=    

除等:/=      取余等:%= 

a-=5 <===> a=a-5;

扩展逗号运算符(顺序求值运算符)

(表达式1,表达式2,表达式3,...,表达式n)  

运算结果是最后一个表达式结果

int a=3,b=5;                       运算结果是最后一个表达式结果:

a=(a*3,a+2,a-1);                                                     a = a-1 = 2

printf("%d\n",a); //2

 优先级

单算移关与    异或逻条赋

单目运算符:++   --   ~    !

算术运算符: /   *   %   +   -

移位运算符: <<   >>

关系运算符:>    >=   <   <=   ==    !=

位与运算符:&

异或运算符:^

位或运算符:|

逻辑运算符:&&   ||

条件运算符:?   :

赋值运算符: = ......

分隔符

空格 tab 换行

变量

程序运行过程中会发生变化的量

格式

存储类型 数据类型 变量名

 (auto)          int             a;

存储类型:    决定变量存储的位置

数据类型 决定开辟空间大小

变量名 :   遵循标识符命名规则

名称

大小(字节)

取值范围(了解)

int

整型

4

char

字符型

1

-2^7~2^7-1

short

短整型

2

long

长整型

324648

float

单精度浮点型

4

有效位数6-7

double

双精度浮点型

8

15-16

局部变量和全局变量的区别

局部变量

全局变量

定义位置

函数体内部

函数体外边

初值

未初始化随机值

未初始化0

作用域

当前函数体内部

整个程序

生命周期

当前函数共存亡

整个函数共存亡

存储位置

全局区

32:   2^32字节==4G

64:   2^6 2^484

栈区:     系统自动开辟、回收 (函数体内部定义的变量)

堆区:     程序员手动开辟(malloc)、回收(free)

全局区、 静态区: 全局变量static修饰的变量

常量区: char *p="hello"

常量

数值型常量

八进制  十进制  十六进制

浮点型常量

float   double

字符常量

程序中用‘ ’包裹

char a='q';

char b='\n';      \n换行

char c='n';       n字符

转义字符:\

char a='A';

printf("%c\n",a);    //A

char b='123';

printf("%c\n",b);    //'3'

char c=0101;

printf("%c\n",c);    //A

char d='\101';

printf("%c\n",d);    //A

char e='\x41';

printf("%c\n",e);    //A

字符串常量

结束标志:用" "包裹 '\0'字符串

例: "hello" 5个字符+'\0'字符串结束标志 == 6个字符

标识常量

宏定义

格式:#define       宏名      常量值 或 表达式 或 函数

宏名:一般用大写,目的跟变量区分开

特点:先进行单纯的替换,替换完之后再计算

#define N 2                                //  N=2

#define M N+3                          //   M=N+3=2+3

#define NUM N+M/2+1            //    NUM=N+M/2+1

void main()                                                       ↓

{                                                              = 2+2+3/2+1

     int a = NUM;

     printf("%d\n",a); //

}

宏定义实现求最大值

#include<stdio.h>

#define MAX a>b?a:b                          //  定义MAX 为  a>b?a:b

int main()

{

     int a=6,b=9;

     printf("%d\n",MAX);

     return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值