嵌入式课堂笔记——格式控制符

   整理5种数据类型以及与之对应的格式控制符,在本文末尾附上5种数据类型下的格式控制符运用代码。

一、整型int(integer)

  1. int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
  2. 变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。
  3. 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647

     1、变量的定义和赋值:

       %d                                                                    int 整型

       %hd                                                                  short 整型,h代表half,即一半的存储字节

       %ld                                                                   long 整型

       %lld                                                                  long long 整型

       %u                                                                    无符号整型

       %hu                                                                  无符号short整型

       %lu                                                                   无符号long 整型

       %llu                                                                   无符号long long 整型

二、浮点型(float、double)

  • 概念:用来表达小数的数据类型
  • 全称:floating point
  • 语法:
    • 单精度浮点型(float),典型尺寸是4字节
    • 双精度浮点型(double),典型尺寸是8字节
    • 长双精度浮点型(long double),典型尺寸是16字节

     

     

        %f                                                                  // 单精度浮点型

       %lf                                                                // 双精度浮点型

       %Lf                                                              // 长双精度浮点型

       %6.1f                                                          // 右对齐并占用宽度为6,保留一位的小数的浮点数

       %e,%E                  转换浮点数为十进制指数记法。 // 比较少用 1234 == 1.234*10的3次方

       %a,%A                  转换浮点数为十六进制记法。      // 基本不用

       %g,%G                 转换浮点数为十进制小数或十进制指数记法,依赖于值和精度。// 基本不用

三、字符型(char)

  • 概念:用来描述字符的数据类型,是一个字节的int型
  • 全称:character
  • 语法:

      %c                                                                     // 单个字符型

      %o                                                                     // 八进制

      %x                                                                      // 十六进制

      %#o                                                                    // 输出带有0前缀的的八进制数 012

      %#x                                                                   // 输出带有0x前缀的十六进制数 0x12

四、字符串型(character string)

    • 在内存中实际上是多个连续字符的组合
    • 任何字符串都以一个 ‘\0’ 作为结束标记,例如:“funny story” 的内存如下

        %s                                                                        // 字符串类型

        %-10s:                                                              // 左对齐并占用宽度为 10 的字符串;

         %10s:                                                              // 右对齐并占用宽度为 10 的字符串;

五、布尔型数据(bool)

  • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
  • 注意:
    • 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
    • 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
    • 布尔型数据常用于逻辑判断、循环控制等场合。

六、常量和变量

  • 概念:不可改变的内存称为常量(该内存可读不可写),可以改变的内存称为变量(该内存可读可写)
  • 变量的类型:int型、char型、float型、double型、字符串型、布尔型等(还有他们无符号、短、长拓展型)
  • 常量的类型:

七、示例代码

       1、int型:输出不同数据类型的int的值和其对应的数据大小

#include <stdio.h>
int main(int argc, char const *argv[])
{
    // 1、整型(signed int, unsigned int)(integer)
    int num1 = 100;         // signed int 有符号
    printf("int num1 value == %d\n", num1);
    printf("int num1 size  == %lu\n", sizeof(num1)); // sizeof可以计算数据返回的数据类型的大小(sizeof返回的类型是long unsigned int数据类型的)

    unsigned int num2 = 200;
    printf("unsigned int num2 value == %u\n", num2);
    printf("unsigned int num2 size  == %lu\n", sizeof(num2)); 

    // 2、短整型(short int, unsigned short int)
    printf("\n");
    short num3 = 300;
    printf("short int num3 value == %hd\n", num3);
    printf("short int num3 size  == %lu\n", sizeof(num3)); 


    unsigned short num4 = 400;
    printf("unsigned short int num4 value == %hu\n", num4);
    printf("unsigned short int num4 size  == %lu\n", sizeof(num4)); 

    // 3、长整型(long int, unsigned long int)               // 注意:long在32位系统下:4个字节, 64位系统下:8个字节
    printf("\n"); 
    long num5 = 500;
    printf("long int num5 value == %ld\n", num5);
    printf("long int num5 size  == %lu\n", sizeof(num5)); 

    unsigned long num6 = 600;
    printf("unsigned long int num6 value == %lu\n", num6);
    printf("unsigned long int num6 size  == %lu\n", sizeof(num6)); 

    // 4、长长整型(long long int, unsigned long long int)   // 注意:long long在32位系统、64位系统下:都是8个字节
    printf("\n"); 
    long  long num7 = 700;
    printf("long long int num7 value == %lld\n", num7);
    printf("long long int num7 size  == %lu\n", sizeof(num7)); 

    unsigned long long num8 = 800;
    printf("unsigned long long int num8 value == %llu\n", num8);
    printf("unsigned long long int num8 size  == %lu\n", sizeof(num8)); 


}

   2、float型:输出不同数据类型的float的值和其对应的数据大小

#include <stdio.h>
int main(int argc, char const *argv[])
{
    // 1、单精度浮点型
    float f1 = 3.14;
    printf("f1 = %f\n", f1);       
    printf("f1 = %10.1f\n", f1);   // 正数10表示右对齐(即一共打印10个数据,数据靠右, 左对齐默认(或加个-(负数)))
                                   // .1表示打印的数据只保留1位小数
    printf("f1(size) == %lu\n", sizeof(f1));   

    // 2、双精度浮点型
    printf("\n");
    double f2 = 114.114;
    printf("f2 = %lf\n", f2);       
    printf("f2 = %-10.1lf\n", f2);   
    printf("f2(size) == %lu\n", sizeof(f2));       

    // 3、长双精度浮点型(32位系统:12个字节, 64位系统:16个字节)
    printf("\n");
    long double f3 = 6.18;
    printf("f3 = %Lf\n", f3);       
    printf("f3 = %-10.1Lf\n", f3);   
    printf("f3(size) == %lu\n", sizeof(f3));      

    // 笔试题
    if (f1 == 3.14)                 // 小数常量,默认是以64位(8个字节)内存来存放的 (float型的精度是32位(4个字节), 小数常量的精度是64位(8个字节),不够数据比较,所以不等)
    {
        printf("f1 等于 3.14\n");       
    }
    else
    {
        printf("f1 不等于 3.14\n");
    }


    if (f2 == 114.114)              //  double型的精度是64位(8个字节), 小数常量的精度是64位(8个字节),数据刚好够比较,所以相等
    {
        printf("f2 等于 114.114\n");       
    }
    else
    {
        printf("f2 不等于 114.114\n");
    }

    if (f3  ==  6.18)                //  long double型的精度是16个字节, 小数常量的精度是64位(8个字节),数据足够比较,所以相等
    {
        printf("f3 等于 6.18\n");       
    }
    else
    {
        printf("f3 不等于 6.18\n");
    }

    return 0;
}

  3、char型:输出不同数据类型的char的值和其对应的数据大小

#include <stdio.h>
int main(int argc, char const *argv[])
{
    // 1、打印字符(字符 == 单字节的整型数)
    char ch1 = 'a';     // 单引号表示字符
    char ch2 = 105;     // 可以直接给字符类型赋整型数(因为字符类型本质上就是一个整型数(单字节))
    int  ch3 = 106;

    printf("ch1 == %d\n", ch1); // 将这个字符变量ch1,以十进制数形式输出
    printf("ch2 == %c\n", ch2); // 以字符形式,打印这个ch2变量的值
    printf("ch3 == %c\n", ch3); // 以字符形式,打印这个ch3变量的值

    // 2、字符打印格式(其它格式)
    char ch4 = 88;
    printf("ch4(字符)      == %c\n", ch4);   // 打印字符
    printf("ch4(十进制)    == %d\n", ch4);   // 打印十进制数据
    printf("ch4(八进制)    == %o\n", ch4);   // 打印八进制数据
    printf("ch4(十六进制)  == %x\n", ch4);   // 打印十六进制数据

    printf("ch4(八进制)    == %#o\n", ch4);   // 打印八进制数据   
    printf("ch4(十六进制)  == %#x\n", ch4);   // 打印十六进制数据(0123456789abcdef,小写)

    int num  = 110110;
    printf("ch4(十六进制)  == %#X\n", num);   // 打印十六进制数据(0123456789ABCDEF,大写)

    return 0;
}

 4、字符串型(charactor string):输出不同数据类型的字符串的值和其对应的数据大小

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    // 1、定义字符串
    char ch1 = 'a';                 // 单引号''表示字符
    char buf1[16] = "nihao";        // 双引号""表示字符串(推荐初学者表示字符串时,使用buf数组来表示)
    char *p1      = "shijie";       // 指针指向字符串常量区

    printf("buf1 = %s\n", buf1);    // 为什么可以刚刚好将字符串打印完全呢??(因为每一个字符串的末尾都有一个结束标记符'\0',函数printf遇到这个结束标记符,就会停止打印)        
    printf("p1   = %s\n", p1);

    // 2、字符串的显示位置控制
    printf("buf1(字符串左对齐) == %-10sfanggong\n", buf1);
    printf("p(字符串右对齐)    == %10s\n", p1);

    // 笔试题1:
    char buf2[5] = "nihao";         // 不是字符串(不建议这么写,因为nihao字符已经占了5个字节了,没有'\0'存放的空间)
    char buf3[6] = "nihao";         // 是字符串

    // 笔试题2:strlen和sizeof的区别
    // a、sizeof是一个运算符,能够计算出变量的字节大小,对于字符串来说,sizeof会把字符串最后的那个'\0'字符也计算进去
    printf("sizeof(buf3) == %lu\n", sizeof(buf3));

    // b、strlen是一个函数,是C语言标准字符串库里面提供的一个计算字符串长度的函数,遇到'\0'就会结束
    printf("strlen(buf3) == %lu\n", strlen(buf3));

    // 笔试题3:内存题
    buf1[0] = 'a';                  // 可以赋值(因为赋值的地方是数组,数组的内存处在栈区(可读可写的区域))
    // *(p1+0)  = 'a';              // 不可以赋值(因为赋值的地方是内存的常量区(可读不可写))

    return 0;
}

5、布尔型(bool):输出不同数据类型的字符串的值和其对应的数据大小

#include <stdio.h>
#include <stdbool.h>        // 会有定义的真值(true)和假值(false)

// 官方定义的(stdbool.h)
/*
    #define true    1
    #define false   0
*/

// 自己定义的
#define TRUE    1
#define FALSE   0

int main(int argc, char const *argv[])
{
    // 一般定义
    bool flag = 100;        // 非0为真,0为假

    // 判断方法1:
    if (flag == TRUE)
    {
        printf("11111111111\n");
    }
    else
    {
        printf("222222222\n");
    }

    // 判断方法2:(笔试题)  
    if (flag)       // 真
    {
        printf("3333333333333\n");
    }
    
    if(!flag)       // 逻辑非,假
    {
        printf("4444444444444\n");
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值