(接上一篇)嵌入式C语言中关于运算符,ASCII码,标准C库中的IO函数,逗号运算符,三目运算符的定义和详细说明。

三、运算符。
四则运算: + - * /
模运算:   %
赋值运算: =  ==  !=  +=  -= *=  /=
逻辑运算: & && | ||
自增自减: ++ --

需要注意的点:
1、把一个浮点型的数据赋值给一个整型的变量,那么精度降低。
2、把整型数据赋值给一个浮点型的变量,那么就会在后面补0。
3、除法。
5/2    -> 2
5.0/2  -> 2.5
5/2.0  -> 2.5
5.0/2.0-> 2.5

4、模运算。
5%2     -> 1
5.0%2   -> 错
5%2.0   -> 错
5.0%2.0 -> 错

5、& && | ||

&    --> 位与运算
&&   --> 逻辑与运算
|    --> 位或运算 
||   --> 逻辑或运算

与: 必须两者都为真,才为真。
或: 只要有一个为真,那么就为真。

一个符号  -> 先转换为2进制数字,然后使用 与/或 逻辑去计算
二个符号  -> 非零即真

#include <stdio.h>

int main(int argc,char *argv[])
{
    /*
    int a = 10;
    int b = 20;
    int c = a + b;
    printf("c = %d\n",c);  //30
    
    float d = a + b;
    printf("d = %f\n",d);  //30.000000
    
    float e = 3.14;
    int f = 10;
    int g = e + f;
    float h = e + f;
    
    printf("g = %d\n",g); //13         //3.14 + 10 = 13.14
    printf("h = %f\n",h); //13.140000  //3.14 + 10
    */
    
    /*
    int a = 5/2;
    printf("a = %d\n",a);  //2    5/2的结果就是2  2赋值给a  所以a就是2
    
    a = 5.0/2;
    printf("a = %d\n",a);  //2    5.0/2的结果就是2.500000  2.500000赋值给a  精度降低  所以a就是2
    
    a = 5/2.0;
    printf("a = %d\n",a);  //2    5.0/2的结果就是2.500000  2.500000赋值给a  精度降低  所以a就是2
    
    a = 5.0/2.0;
    printf("a = %d\n",a);  //2    5.0/2的结果就是2.500000  2.500000赋值给a  精度降低  所以a就是2
    
    
    float b = 5/2;
    printf("b = %f\n",b); //2.000000     5/2的结果就是2  2赋值给b  所以b就是2.000000
    
    b = 5.0/2;
    printf("b = %f\n",b); //2.500000     5.0/2的结果就是2.500000  2.500000赋值给b  所以b就是2,500000
    
    b = 5/2.0;
    printf("b = %f\n",b); //2.500000     5.0/2的结果就是2.500000  2.500000赋值给b  所以b就是2,500000
    
    b = 5.0/2.0;
    printf("b = %f\n",b); //2.500000     5.0/2的结果就是2.500000  2.500000赋值给b  所以b就是2,500000
    */
    
    //int a;
    //a = 5%2;
    //printf("a = %d\n",a);  //1
    
    //a = 5.0%2;
    //printf("a = %d\n",a);
    
    //a = 5%2.0;
    //printf("a = %d\n",a);
    
    //a = 5.0%2.0;
    //printf("a = %d\n",a);
    
    // & && | ||
    
    /*
    int a = 5&6;
    printf("a = %d\n",a);
    
    a = 5|6;
    printf("a = %d\n",a);
    
    a = 5&&6;
    printf("a = %d\n",a);
    
    a = 5||6;
    printf("a = %d\n",a);
    */
    
    //int a = 10;
    //a += 5;  // a = a + 
    //printf("a = %d\n",a);
    
    //int b = 10;
    //b++;
    //printf("b = %d\n",b);  //11
    
    //int c = 20;
    //++c;
    //printf("c = %d\n",c);  //21
    
    //前置++  与 后置+= 区别
    //前置++  先加1 ,再运算
    //后置++  先运算 , 后加1

    int b = 10;
    printf("b = %d\n",b++);  //10  先打印,再+1
    printf("b=  %d\n",b);    //11
    int c = 10;
    printf("c = %d\n",++c);  //11  先+1  再打印
    printf("c = %d\n",c);    //11
    return 0;
}

四、ASCII码。
1、如何在Ubuntu上查看ASCII码表?
gec@ubuntu:/mnt/hgfs/GZ2180/01 C语言/02/code$ man ascii  (按'q'退出)

2、ascii码表作用是什么?
ascii - ASCII character set encoded in octal, decimal, and hexadecimal
    //将字符转换成对应的八进制、十进制、十六进制数字

3、如何查看ascii码表?
char类型的数据占用1个字节  --> 8位   --> 2^7 = 128   (取值范围:0~127)

  八进制    十进制   十六进制    字符
    Oct      Dec      Hex       Char                          
    000       0       00        NUL '\0' (null character)     十进制的0  等价于  字符'\0'  (代表一个空白的字符)
    012      10       0A        LF  '\n' (new line)           十进制的10 等价于  字符'\n'
    060      48       30        0                             十进制的48 等价于  字符'0'
    101      65       41        A                             十进制的65 等价于  字符'A'             
    141      97       61        a                             十进制的97 等价于  字符'a'

4、printf()输出格式符号。

%d  --> 以十进制的形式来输出结果
%o  --> 以八进制的形式来输出结果
%x  --> 以十六进制的形式来输出结果
%c  --> 以字符的形式来输出结果
%f  --> 以浮点型来输出结果。  --> 默认输出小数点后6位。
%.4f--> 以浮点型来输出结果。  --> 指定输出小数点后4位。
%s  --> 输出字符串
%p  --> 输出指针

 
#include <stdio.h>

int main(int argc,char *argv[])
{
    int a = 65;
    printf("a = %d\n",a); //65       //以十进制形式来输出a变量的值
    printf("a = %o\n",a); //101      //以八进制形式来输出a变量的值
    printf("a = %x\n",a); //41       //以十六进制形式来输出a变量的值
    printf("a = %c\n",a); //A        //以字符形式来输出a变量的值
    
    int b  = 0;
    printf("b = %d\n",b);  //0
    printf("b = %o\n",b);  //0
    printf("b = %x\n",b);  //0
    printf("b = %c\n",b);  //
    
    char c = 'a';
    printf("c = %d\n",c);  //97
    printf("c = %o\n",c);  //141
    printf("c = %x\n",c);  //61
    printf("c = %c\n",c);  //a
    
    return 0;
}

5、ascii码表存在说明了一个问题。
其实字符类型的数据就是整型数据。

五、标准C库中的IO函数。
1、IO函数是什么?
IO函数  --> input/output函数   --> 输入/输出函数   --> scanf()/printf()

2、它们的作用是什么?
printf()   -->  输出某段内存空间上的值。
scanf()    -->  从键盘中获取一些值,并放在内存空间中。

3、scanf()函数作用。
例如:我从键盘中获取一个整型的数据,并且把这个数据存放在一个整型变量中。

1)输入单个数字。
#include <stdio.h>

int main(int argc,char *argv[])
{
    int x = 100;  //在栈区连续申请4个字节的空间,并使用变量x间接访问这片空间。
    
    printf("x = %d\n",x);  //将内存中x变量的值输出
    
    scanf("%d",&x);  //从键盘中获取一个十进制数据,然后存放在&x这个地址指向的内存空间上。
    
    printf("x = %d\n",x);  //将内存中x变量的值输出
    
    return 0;
}

2)输入多个数字。
#include <stdio.h>

int main(int argc,char *argv[])
{
    int x = 100;  //在栈区连续申请4个字节的空间,并使用变量x间接访问这片空间。
    int y,z,k;
    
    printf("x = %d\n",x);  //将内存中x变量的值输出
    
    scanf("%d %d %d %d",&x,&y,&z,&k);  //从键盘中获取一个十进制数据,然后存放在&x这个地址指向的内存空间上。
    
    printf("x = %d\n",x);  //将内存中x变量的值输出
    printf("y = %d\n",y);
    printf("z = %d\n",z);
    printf("k = %d\n",k);
    
    return 0;
}

六、逗号表达式。
计算规则:从左到右依次计算,结果以最后一个表达式为准。

例如:
int a=1,b=5,c=10,d;
d = (a=a+b,c=b+c,a+c);
printf("d = %d\n",d);  //21

分析:
a=a+b  --> a=1+5=6   --> 现在: a=6  b=5  c=10
c=b+c  --> c=5+10=15 --> 现在: a=6  b=5  c=15
a+c    --> 6+15=21       把21赋值d

    练习: 
    int a=1,b=2,c=3,d;
    d = (c=a+3,b-=a,b++);
    printf("d = %d\n",d);  // 1  2

分析:
c=a+3   --> c=1+3=4   现在:a=1  b=2  c=4
b=b-a   --> b=2-1=1   现在:a=1  b=1  c=4

d = b++;   把b的值先赋值给d,然后b再加1

七、三目运算。
1、三目运算的形式:
表达式 ? 结果1 : 结果2

2、三目运算的规则:
先判断表达式的值是真还是假。
如果是真,则执行的结果就为结果1。
如果是假,则执行的结果就为结果2。

3、例子。
int a = 1,b = 2,c;
c = ( a > b ? a : b );    --> 求出a与b之间的最大值
printf("c = %d\n",c);  //2

   练习时间:
   假设有以下的表达式,"A ? i : j" 请问以下哪个表达式与之等价?

 A. A==0 ? i : j;
 B. A!=0 ? i : j;   √
 C. A==1 ? i : j;
 D. A!=1 ? i : j;


"A ? i : j"
如果A为真,则结果为i。
如果A为假,则结果为j。


 A==0 ? i : j;
如果A为真  ---> 说明A就是一个非0   -->  非0 == 0 ?   --> 假   --> 则结果为j。
如果A为假  ---> 说明A就是一个0     -->    0 == 0 ?   --> 真   --> 则结果为i。

 A!=0 ? i : j;
 
如果A为真  ---> 说明A就是一个非0   -->  非0 != 0 ?   --> 真  --> 则结果为i。
如果A为假  ---> 说明A就是一个0     -->    0 != 0 ?   --> 假  --> 则结果为j。

 A==1 ? i : j;

如果A为真  ---> 说明A就是一个非0   -->  非0 == 1 ?  --> 不一定

 A!=1 ? i : j;

如果A为真  ---> 说明A就是一个非0   -->  非0 != 1 ?  -->  不一定

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肖爱Kun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值