c语言基础(二)

235 阅读6分钟

常量:不会变化的数据。不能被修改

  1. "hello"、'A'、-10、3.1415926(浮点常量)

  2. #define PI 3.1415

    • 【强调】:没有分号结束标记。
    • 【推荐】 定义宏: 定义语法: #define 宏名 宏值
  3. const int a = 10; 定义语法:const 类型名 变量名 = 变量值。

  4. const关键字: 被该关键字修饰的变量,表示为只读变量

变量:会变化的数据。能被修改

  • 定义语法:类型名 变量名 = 变量值。(一般方法)
  • 变量三要素:类型名、变量名、变量值。 int r = 3; float s = PIrr;(变量值是一个表达式)
  • 变量的定义: int a = 40;
  • 变量的声明:
    • int a;  没有变量值的变量定义 叫做声明。
    • extern int a; 添加了关键字 extern

声明和定义的区别:

  • 变量定义会开辟内存空间。变量声明不会开辟内存空间。
  • 变量要想使用必须有定义。

当编译器编译程序时,在变量使用之前,必须要看到变量定义。如果没有看到变量定义,编译器会自动找寻一个变量声明提升成为定义。 如果该变量的声明前有 extern 关键字,无法提升。
建议:定义变量时。尽量不要重名

标识符:变量和常量的统称

命名规则

  • 通常常量使用大写、变量使用小写。大小写严格区分。
  • 只能使用字母、数组、下划线()命名标识符。且,数字不能开头。 a-z/A-Z/0-9/

举例

- int a5ir = 10; ok  
- int _34F = 6; ok  
- float s2_i85c = 5.4;  ok  
- int 98ti_54 = 4;  error.  
禁止使用关键字和系统函数作为标识符名称。  main/system/printf/sleep....  

sizeof关键字:不是函数

用来求一个变量、类型的大小。 
返回一个**无符号整数**。 使用 %u 接收返回值。  
使用方法1sizeof(类型名) -- sizeof(int)  
使用方法2sizeof(变量名) --- int a = 20sizeof(a)  
另一种方式:sizeof 变量名/类型名  
- 举例1sizeof int  
- 举例2sizeof a 

有符号整型:

- signed: 有符号 (超级不常用, 通常省略): int a = 10; a = -7;  
- int类型: %d 4 字节  
    int 名 = 值;  
- short类型: %hd 2 字节  
    short 名 = 值; short s1 = 3;  
- long类型: %ld 4 字节 (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)  
    long 名 = 值; long len = 6;  
- long long 类型:%lld 8 字节  
    long long 名= 值; long long llen = 70; 

无符号整型:

- unsigned: 无符号  只表示数据量,而没有方向(没有正负)  
- unsigned int类型: %u 4 字节  
    unsigned int 名 = 值;  
    unsigned int a = 40;  
- unsigned short类型: %hu 2 字节  
    unsigned short 名 = 值;  
    unsigned short s1 = 3;  
- unsigned long类型: %lu 4 字节 (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)  
    unsigned long 名 = 值;  
    unsigned long len = 6;  
- unsigned long long 类型:%llu 8 字节  
    unsigned long long 名 = 值;  
    unsigned long long llen = 70;

char字符类型:1字节

存储一个字符。本质是ASCII码。 'A''a''%''#''0'  
格式匹配符: %c  
- 'A'65  
- 'a'97  
- '0'48  
- '\n':10  
- '\0': 0 

转义字符:

- '\' 
    - 将普通字符转为特殊意。 
    - 将特殊字符转为本身意。  
- '\n''\0'  

实型(浮点数、小数):

- float: 单精度浮点型。 4字节  
    float v1 = 4.345;  
    %f格式匹配符。 **默认保留 6 位小数**。  
- double:双精度浮点型。 8字节 【默认】  
    double v2 = 5.678;  
- unsigned float v1 = 4.345; 无符号的 float 数据  
- unsigned double v2 = 5.678; 无符号的 float 数据  
- printf("n = **%08.3f**\n", n);  
输出的含义为:**显示8位**数(包含小数点), **不足8位用0填**充。并且**保留3位小数**。对第4位做**四舍五入**。  

进制和转换:

- 十进制转2进制。 --- 除2反向取余法 
- 十进制转8进制。 --- 除8反向取余法  
- 十进制转16进制。--- 除16反向取余法  
int a = 56;     -- 111000  
int b = 173;    -- 10101101 
  • 2进制转10进制。

8进制:

- 8进制转10进制。  
定义8进制数语法:  
056: 零开头,每位数0~7之间。 ---- 46  
0124:  ---- 84  
  
- 8进制转2进制。  
按421码将每个八进制位展开。  
0565--》 1016--》 110  。  
101110  
053265 --》 1013--》 0112--》 0106--》 110  
  
- 2进制转8进制:  
1 010 111 010 110012726  
自右向左,每3位一组,按421码转换。高位不足三位补0

16进制:

语法: 以0x开头,每位 取 0-9/A-F/a-f  
A -- 10  
B -- 11  
C -- 12  
D -- 13  
E -- 14  
F -- 15  
16 -- 10:  
0x1A16+10 = 26  
0x13F15+3x16+256   
16 -- 2:  
0x1A: 00011010  
0x13F000100111111  
2 -- 16:  
0001 0011 1111: 13F  
自右向左,每4位一组,按8421码转换。高位不足三位补0  

总结:

int m = 0x15F4;  
int n = 345;  
int var = 010011; // 不允许。 不能给变量直接复制 二进制数据。  
输出格式:  
%d %u %o %x %hd %hu %ld %lu %lld %llu %c %f %lf  
%d %u %x %c %s   

存储知识:

1 bit位  就是一个 二进制位

一个字节 `1B = 8bit`位。   
- 1KB = 1024B  
- 1MB = 1024KB  
- 1GB = 1024MB  
- 1TB = 1024GB  

源码反码补码:【了解】

- 源码:  
    43 ->  00101011  
    -43 --> 10101011  
- 反码:  
    43 ->  00101011  
    -43 --> 10101011    
- 补码:(**现今计算机采用的存储形式**)  
    43 ->  00101011 : 正数不变  
    -43 --> 11010101 : 负数,最高位表符号位, 其余取反+1  
- 43-27 ==》 43 + -27  
- 人为规定: 10000000 --》 -128 

数据类型表示范围

  • char 类型:1字节 8个bit位。 数值位有7个。   

    • 有符号: -2^7 --- 2^7-1  == -2^(8-1) -- 2(8-1) -1  
      范围:-128 ~ 127

    • 无符号: 0 ~ 2^8 -1 
      范围:0~255

  • short类型:2字节  16bit

    • 有符号: -2^15 --- 2^15-1  == -2^(16-1) -- 2(16-1) -1  
      范围:-32768 ~ 32767

    • 无符号: 0 ~ 2^8 -1 
      范围:0~65535

  • int 类型:4字节 -2^(32-1) -- 2^(32-1)-1

    • 有符号
      范围:-2147483648 ~ 2147483647

    • 无符号: 02^32 -1 
      范围:0
      4294967295

  • long类型:4字节

    • 有符号
      范围:-2147483648 ~ 2147483647

    • 无符号: 0~2^32 -1 

      范围:0~4294967295

  • longlong 类型:8字节

    • 有符号
      范围:-2^(63) ~ 2^(63)-1

    • 无符号
      范围:0~2^63-1