C语言基础:位、数据类型、空间大小、常量、整型变量、有/无符号数、字符变量、转义字符

本文深入解析了计算机内存架构,从寄存器到硬盘的数据流动路径,详细介绍了内存的基本单位及其计量方式。同时,文章涵盖了多种数据类型,如整型、字符型、浮点型等,探讨了不同类型在内存中的存储效率,以及变量、常量的概念和使用方法。
1.CPU (寄存器 → 一级缓存 → 二级缓存 → 三级缓存) → (总线[数据、地址]) → 内存 → 硬盘
    寄存器64位,总线32位 = 准64位CPU
    寄存器64位,总线64位 = 64位CPU
    寄存器32位,总线32位 = 32位CPU
    寄存器32位,总线16位 = 准32位CPU
 
2.内存最小存储单元 = 一位二进制(0/1)位
    1bit(位)
    1Byte(字节) = 8bit
    内存容量 = 内存的存储单元总量    
    内存最小计量单位 = 字节
    1KB = 1024B
    1MB = 1024KB 
    1GB = 1024MB
    1TB =1024GB
 
3.数据类型→合理的利用空间,提高存储效率
    内存 →(抽象) 一维数组
    基本数据类型:
        char 字符型
        short 短整型
        int 整型
        long 长整型
        float 单精度浮点型(实型)
        double 双精度浮点型
    类型只有大小没有空间
        系统不会给类型分配空间,只有类型定义的变量分配空间
    测量类型的大小:
        sizeof(类型名/变量名)
 
  1. void fun1()  
  2. {  
  3.     printf("char size = %d\n"sizeof(char));// 1B = 8b  
  4.     printf("short size = %d\n"sizeof(short));// 2B = 16b  
  5.     printf("int size = %d\n"sizeof(int));// 4B = 32b  
  6.     printf("long size = %d\n"sizeof(long));// 4B = 32b  
  7.     printf("float size = %d\n"sizeof(float));// 4B = 32b  
  8.     printf("double size = %d\n"sizeof(double));// 8B = 64b  
  9. }  
 
        Windows64平台(long都为4B)
        32位平台
        
 
        64位平台
        
 
        Linux64平台(long为8B)
        
    
4.常量
    在程序运行过程中,其值不能被修改,在内存文字常量区
    常量只可读操作
  1. void fun2()  
  2. {  
  3.     // 字符常量 %c  
  4.     printf("char = %c\n"'a');  
  5.     // 短整型常量 %hd  
  6.     printf("short = %hd\n", 7);  
  7.     // 整型常量 %d  
  8.     printf("int = %d\n", 70);  
  9.     // 长整型常量 %ld  
  10.     printf("long = %ld\n", 700L);  
  11.     // 单精度浮点型常量 %f  
  12.     printf("float = %f\n", 3.14F);  
  13.     // 双精度浮点型常量 %lf  
  14.     printf("double = %lf\n", 3.14);  
  15. }  
        
 
5.变量
    在程序运行过程中,其值可被修改
    系统会根据变量类型为变量开辟空间
    变量可读(取值)可写(赋值)操作,必须先定义后使用
 
6.整型变量
    变量的定义:让变量存在,系统会给变量开辟空间
    变量的声明:告诉编译器该 变量已经存在,此处通过编译,不会开辟空间
    变量的使用:读(取值)/写(赋值)操作,操作空间
    ① 变量的定义:类型名+变量名    例如:int num;
        变量名的本质:空间内容的别名
        变量名的命名规则:以字母数字下划线组成,只能以字母和下划线开头,且不能是保留关键字
        变量名的初始化:在变量定义时并赋初值
 
  1. void fun3()  
  2. {  
  3.     // 变量定义  
  4.     int num1;  
  5.     // 变量赋值  
  6.     num1 = 10;  
  7.     // 变量的初始化  
  8.     int num2 = 20;  
  9. }  
 
    ② 变量的声明:自动识别和显示声明
        自动识别:
 
  1. void fun4()  
  2. {  
  3.     // 编译器从上往下逐语句编译  
  4.     // 变量的定义  
  5.     int num = 10;  
  6.     // 变量的使用  
  7.     printf("num = %d\n", num);  
  8.     // 自动识别声明,变量定义在使用前面  
  9. }  
 
        显示声明:
 
  1. // 显示声明,告诉编译器变量存在,此处通过编译  
  2. // 声明时不需要赋值  
  3. extern int num;  
  4. void fun5()  
  5. {  
  6.     printf("num = %d\n", num);  
  7. }  
  8. // 变量的定义  
  9. int num = 10;  
 
     ③ 变量的使用:读/写
 
  1. void fun6()  
  2. {  
  3.     // 写操作  
  4.     int num1 = 10;  
  5.     printf("num1 = %d\n", num1);  
  6.     int num2;  
  7.     // 写操作 = 读操作  
  8.     num2 = num1;  
  9.     printf("num2 = %d\n", num2);  
  10. }  
 
 
7.获取键盘输入:scanf( )根据数据格式提取键盘输入缓冲区的数据
 
  1. void fun7()  
  2. {  
  3.     int num = 0;  
  4.     printf("请输入一个int数据:\n");  
  5.     // 获取键盘输入  
  6.     // scanf("提取数据的格式", 空间地址)  
  7.     // 带阻塞,直到有数据才往下执行  
  8.     scanf("%d", &num);  
  9.     printf("num = %d\n", num);  
  10. }  
 
 
8.整型的输出形式
    C语言不支持二进制输出
    整型的输出形式:
    ① 八进制(0~7)    0开头    %o
    ② 十进制(1~9)    %d
    ③ 十六进制(1~9, a~f)    0x/0X开头    %x/X
    格式控制符加#完整输出进制标志
    不同进制的输出,不会修改数据值,只是数据的表现形势发生了变化
 
  1. void fun8()  
  2. {  
  3.     int num = 100;  
  4.     // 八进制输出 %o  
  5.     printf("八进制 num = %#o\n", num);// 144  
  6.     // 十进制输出 %d  
  7.     printf("十进制 num = %#d\n", num);// 100  
  8.     // 十六进制输出 %x  
  9.     printf("十六进制 num = %#x\n", num);// 64  
  10. }  
 
    
 
9.有符号和无符号数的区别
    有符号数:由正负之分
                     signed 
                     数值二进制的最高位(最左边)为符号位0正1负,其它为数据位
                     +1 → 0000 0000 0000 0001
                      -1 → 1000 0000 0000 0001
    无符号数:无正负之分,全是正数
                     unsigned 
                     全是数据位
                     1 → 0000 0000 0000 0001
    ① 有符号和无符号常量
    
  1. void fun9()  
  2. {  
  3.     // 10默认位有符号数 10U为无符号数  
  4.     // signed int %d  
  5.     printf("%d\n", 10);  
  6.     // unsigned int %u  
  7.     printf("%u\n", 10U);  
  8.     // signed long %ld  
  9.     printf("%ld\n", 10L);  
  10.     // unsigned long %lu  
  11.     printf("%lu\n", 10LU);  
  12. }  
 
    ② 有符号和无符号变量
 
  1. void fun10()  
  2. {  
  3.     // 定义有符号变量 signed(可省略)  
  4.     // signed int num = 10;  
  5.     int num1 = 10;  
  6.     // 定义无符号变量 unsigned  
  7.     unsigned int num2 = 20U;  
  8.     printf("num1 = %d\nnum2 = %u\n", num1, num2);  
  9. }  
 
 
10.字符常量与变量:char
    ① 字符常量:单引号 → 'A' 、'a',单引号''作用(字符类型说明,取ASCII码值
    
  1. void fun11()  
  2. {  
  3.     // 字符常量输出 %c  
  4.     printf("字符常量:%c\n"'A');  
  5. }  
 
    ② 字符变量:类型名+变量名
        char ch; 
        系统给变量开辟一个字节空间
 
  1. void fun12()  
  2. {  
  3.     char ch = 'A';  
  4.     printf("ch = %c\n", ch);  
  5.     printf("sizeof(ch) = %u\n"sizeof(ch));  
  6. }  
 
        
 
    ③ 字符存放:字符常量与特定的数值一一对应(ASCII表)
         本质存放的是字符的ASCII码值
         例:如果ch存放‘A’,则其存放的是‘A’对应的ASCII码值65
 
  1. void fun13()  
  2. {  
  3.     char ch = 'A';  
  4.     // 输出字符 %c  
  5.     printf("ch = %c\n", ch);  
  6.     // 输出ASCII码值 %d  
  7.     printf("ch = %d\n", ch);  
  8.     printf("ch = %c\n", 65);  
  9. }  
 
        
 
    ④ 字符变量大小写转换
         大写字母比小写字母小32
         ch = ch - ('a' - 'A')
         大写 → 小写    +32
         小写 → 大写     -32
         ‘a’~‘b’:97 ~ 122
         ‘A’~‘B’:67 ~ 90
     ⑤ 转义字符:一些无法直接显示的字符,用‘\*’表示
 
  1. void fun14()  
  2. {  
  3.     // '\a' 警报声  
  4.     printf("%c\n"'\a');  
  5.     // '\n' 换行符  
  6.     printf("##%c##\n"'\n');  
  7.     // '\t' Table  
  8.     printf("##%c##\n"'\t');  
  9.     // '\r' 光标回到行首  
  10.     printf("123%c456\n"'\r');// 456  
  11.     // '\\' 表示一个\;  
  12.     printf("1\\2%c3\\4\n"'\\');  
  13.     // '%%' 表示一个%  
  14.     printf("%%%d\n", 10);  
  15. }  
 
        
 
11.0    '0'    '\0'    的区别
 
  1. void fun15()  
  2. {  
  3.     printf("0 → %d\n", 0);  
  4.     printf("'0' → %d\n"'0');  
  5.     printf("'\\0' → %d\n"'\0');  
  6. }  
 
        
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值