嵌入式软件--C语言学习 DAY 3

一、sizeof

使用sizeof 可以获取数据类型或变量、字面量的存储大小,单位是字节。

sizeof返回一个size_t类型的无符号整数值,格式占位符是 %zu。

size_t 通常是 unsigned int 或 unsigned long 的别名,具体是哪个类型的别名,由系统和编译器决定。

代码演示:

#include <stdio.h>

int main()
{
    // sizeof:可以检查出 类型 占得内存大小->字节
    printf("char=%zu\n", sizeof(char));
    printf("short=%zu\n", sizeof(short));
    printf("int=%zu\n", sizeof(int));
    printf("long=%zu\n", sizeof(long));
    printf("long long=%zu\n", sizeof(long long));
    printf("float=%zu\n", sizeof(float));
    printf("double=%zu\n", sizeof(double));
    printf("long double=%zu\n", sizeof(long double));

    // sizeof:可以检查出 变量 占得内存大小->字节
    char ch = 'a';
    int a = 12306;
    double num = 3.14;
    printf("a=%zu\n", sizeof(a));
    // 检测对应变量的时候,小括号可以省略
    printf("ch=%zu\n", sizeof ch);
    printf("num=%zu\n", sizeof num);

    // 检测字面量
    // 字符本质即为整数=97->默认int类型
    printf("字符a=%zu\n", sizeof 'a');
    printf("小数6.6=%zu\n", sizeof 6.6);

    // sizeof可以检测:类型 变量 字面量等占用的内存的大小
    //char 占用一个字节 int 四字节 double 八字节
    printf("%zu\n", sizeof(7 + 8));

    return 0;
}

二、数据类型转换

1.自动隐式转换

(1)转换规则:

  1. 不同类型整数进行运算,窄类型整数自动转换为宽类型整数。
  2. 不同类型浮点数进行运算,精度小的类型自动转换为精度大的类型。
  3. 整数与浮点数进行运算,整数自动转换为浮点数。

(2)转换方向

(3)案例演示

《1》窄类型自动转为宽类型。

《2》不同类型浮点数进行运算,精度小的类型自动转换为精度大的类型。

《3》整数自动转换为浮点数。

《4》赋值时,类型自动转换。窄类型赋值给宽类型,等号右边的类型转变为左边的类型,不会造成精度损失。宽类型赋值给窄类型,则会精度损失。

2.强制类型转换

隐式类型转换中的宽类型赋值给窄类型,编译器是会产生警告的(有些编译器不会),提示程序存在潜在的隐患,如果非常明确地希望转换数据类型,就需要用到强制(或显式)类型转换。

转换格式:(类型名)变量、常量、表达式(比如7+8)

例子:(int)a,(int)3.14,(int)a+b

演示代码:

三、运算符

1.算术运算符

+、-、*、/、%对于变量本身的值没有影响。

++、--会对变量有影响。

++a,变量a在使用之前先加一;

a++,变量a在使用之后才加一。--也是如此。且使用后对变量的值有影响。

2.关系运算符

#include <stdio.h>

int main() 
{
    int a = 8;
    int b = 7;

    printf("a>b的值:%d \n", a > b); 
    printf("a>=b的值:%d \n", a >= b); 
    printf("a<b的值:%d \n", a < b); 
    printf("a<=b的值:%d \n", a <= b);
    printf("a==b的值:%d \n", a == b);
    printf("a!=b的值:%d \n", a != b);

    return 0;;
}

输出结果:

a>b的值:1

a>=b的值:1

a<b的值:0

a<=b的值:0

a==b的值:0

a!=b的值:1

3.逻辑运算符

(1)逻辑与&&

  1. 如果两个操作数都为真(非零),那么表达式的值为真,否则为假。
  2. 如果第一个操作数为假,第二个操作数没有计算的必要了,这种现象称为短路现象。

类似于高中物理学的串联电路。

(2)逻辑或||

  1. 如果两个操作数都为真(非零),那么表达式的值为真,否则为假。
  2. 如果第一个操作数为假,第二个操作数没有计算的必要了,这种现象称为短路现象。

类似于高中物理学的并联电路。

(3)逻辑非!

操作数取反。

4.赋值运算符

a+=6  ==>   a=a+6;

5.位运算符

PS:操作数进行位运算的时候,以它的补码形式进行运算。

6.三元运算符

基本语法:     条件表达式? 表达式1: 表达式2;

取值:

  1. 如果条件表达式为非0(真),整个表达式的值是表达式1;
  2. 如果条件表达式为0(假),整个表达式的值是表达式2;
#include <stdio.h>
// 三元运算符:条件?A:B;
int main()
{
    // int num = 6;
    // int num1 = 9;
    // printf("三元运算:结果%d\n", 1 ? num : num1);
    // printf("三元运算:结果计算出谁大:%d\n", num > num1 ? num : num1);

    int a = 100;
    int b = 200;
    int c = 300;
    int result = (a > b ? a : b) > c ? (a > b ? a : b) : c;
    printf("%d\n", result);

    return 0;
}

输出 300

7.运算符优先级

不需要记太多,开发过程不用表达的太复杂,分几步完成即可。先算乘除后算加减,有括号先算括号里。

四、程序控制语句

流程控制语句

单分支语句

if(condition)

{

······代码片段

}

五、课后练习

  1. 实现判断一个整数,属于哪个范围:大于0;小于0;等于0。
#include <stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    if(a>=0)
    {
        if(a==0)
        {
            printf("这个数等于0.");
        }
        else
        {
            printf("这个数大于0.");
        }
    }
    else
    {
         printf("这个数小于0.");
    }
   
    return 0;
}

2.判断年份是否闰年。

#include <stdio.h>
int main(){
    int year,leap;
    scanf("%d",&year);
    if(year%4==0 && year%100!=0 || year%400==0)
    printf("this year is 闰年");
    else 
    printf("this year is 平年");
    return 0;
}

六、今日小测

1.写出至少五个二元运算符。

2.写出下面程序运行成果。

int a = 5, b = 10, result;
result = (a > b) ? a : b;
printf("%d", result);

3.写出下面程序的执行结果。

int num = 8;
num = num << 2;
printf("%d", num);

4.

int num = 10;
if (num++ || num--)
{
    num++;
}
printf("%d", ++num);

答案:

1.+、-、*、/、%、<、<=、>、>=、=、!=、&&、||、&、|、<<、>>、=、+=、-=

2. 10

3. 32

4.  13   

解析:

  1. if (num++ || num--) { num++; }: 这是一个if语句它使用逻辑或运算符连接两个条件,num++ 表示使用当前值,然后将 num 的值递增,在这里,它增加了 num 到 11。
  2. 由于逻辑或运算符的短路特性,第一个条件为真(非零),则不会执行第二个条件,num -- 没有执行。
  3. if 的条件表达式最终是是成立的,代码块中的 num++ 会被执行,将 num 增加到12。
  4. printf("%d", ++num); ,++num 表示先将 num 的值递增,然后使用递增后的值。所以输出的结果是 13.
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值