二、C_base——数据类型/运算符

本文深入探讨C语言的基础,包括各种数据类型(如bool, char, int, float等)、数据的存储方式、全局变量与局部变量的区别、常量的使用,以及各类运算符(如算术、比较、逻辑、位运算等)和它们的运算优先级。通过源码及注释,帮助读者理解和应用这些概念。" 125176279,12422335,SQL刷题宝典:268道精选习题解析,"['SQL', '面试题', '数据库', '学习']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【1】数据类型

1--- 定义变量

        数据类型 变量名 = 初始值;
        数据类型 变量名;


        变量名:由数字、字母、下划线组成,开头不能是数字

2--- bool
        #include <stdbool.h>
        bool a = 123;
        printf(“a = %d\n”,a);       



3--- char
        char a = 'A';           //占1个字节,8位
        printf(“a = %c\n”,a);   --> A   
        printf(“a = %d\n”,a);   --> 65
        signed char     :-128~127
        unsigned char    :0~255



4--- int
        int 占4字节,32位
        signed int  :-2147483648 ~ 2147483647
        unsigned int    :0~ 4294967295



        short 占2字节,16位
        signed short    :-32768 ~ 32767
        unsigned short  :0 ~ 65535


        long 占4字节



5--- float

        float   占4字节
        double  占8字节

【2】数据的存储

    正数:unsigned  char a = 12    
         0000  1100 源码、反码、补码相同

    负数:signed   char a = -12
        1000  1100   源码(最高位是符号位)
        1111  0011   反码(符号位不变,其它位取反)
        1111  0100   补码(反码+1)


unsigned char b = -1;                   signed char c = 129;
存储(看数值):                              存储(看数值):

源码:  1000 0001    --> -1             源码: 1000 0001   --> 129
反码:  1111 1110                          
补码:  1111 1111                 读取(signed): 

读取(unsigned):                    补码:  1000 0001    
                                    反码:  1000 000
补码:  1111 1111    --> 255         源码:  1111 1111   --> -127

【3】全局变量和局部变量

     全局变量,不初始化时为0。   
     局部变量,不初始化时为随机值。
     全局变量和局部变量名字相重时默认使用局部的变量。

【4】常量

    只读的数据。

    字符常量  :‘A’  ‘*’  ‘!’ ‘\n’
    整数常量  : 12    012    0x12
    浮点型常量: 12.34
    指数常量  : 1.2e-3
    字符串常量: "world"      //以‘\0’作为结束标志

    "world"     // w o r l d \0
    ‘w’         //一个字符 
    "w"         //字符串: 'w' + '\0'

【5】运算符

1--- 算术运算符
        +  -  *  /  %(参与运算的只能是整数)

        ++   自增运算符;++在变量名的后面:则先参与其他所有运算,再执行自增
        --   自建运算符;--在变量名的后面:则先参与其他所有运算,再执行自减


2--- 关系运算符
        运算结果只有两种情况:真1  假0

        <   <=    >    >=   ==   !=

3--- 逻辑运算
        运算结果只有两种情况:真1  假0

        &&  :一假则假   
        ||  :一真则真
        !   :真变假,假变真

        短路原则:当一个表达式可以决定整个运算的结果,其它运算不执行      

4--- 位运算

        ~   :位运算取反 
        ^   :异或,相同为0,不同为1
        &   :位与
        |   :位或

        a>>n : a / 2^n;
        a<<n : a * 2^n;


5--- 复合运算符

        =  +=  -=   *=   /=  %=
        &=  |=  ^=  <<=  >>=

6--- 条件运算符
        <表达式1>  ?  <表达式2>  :  <表达式3>
        先判断表达式1,为真执行表达式2, 为假执行表达式3

【6】运算优先级

    ()
     ++  --

     *  /  %
     +   -

    <<   >>

    关系运算

    位运算符(&  ^  |)

    逻辑运算

    赋值运算,复合运算符

      , 

源码及注释:

1、1_bool.c

#include <stdio.h>
#include <stdbool.h>

//数据类型 变量名 = 初始值;

int main(int argc, const char *argv[])
{
    bool  a = 123;
    printf("a = %d\n", a);  //printf:用于向终端输出指定格式的数据
                            //双引号里的数据原样输出,除%形式以外
    a = 0;
    printf("a = %d\n", a);  //printf:用于向终端输出指定格式的数据


    return 0;
}

2、2_char.c

#include <stdio.h>

//数据类型 变量名 = 初始值;

int main(int argc, const char *argv[])
{
    //字符类型
    char a = "";                    //占一个字节,8位
    printf("a = %c\n",a);           //%d:整型     %c :字符类型


    //0 ~ 255
    unsigned char b = -1;
    printf("b = %d\n",b);

    //-128 ~ 127
    signed char c = 129;
    printf("c = %d\n",c);

    return 0;
}

3、3_int.c

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int a = 10;                     //占4字节,32位
    printf("a = %d\n",a);

    short b = 30;                   //占2字节,16位
    printf("b = %d\n",b);

    long c = 40;                    //占4字节(在32位操作系统下)
    printf("c = %ld\n",c);  //%d 整型   %c 字符类型   %ld long

    return 0;
}

4、4_float.c

#include <stdio.h>

int c;                              //全局变量,不初始化时为0

int main(int argc, const char *argv[])
{
    float a = 12.34;
    printf("a = %f\n",a);

    double b = 34.56;
    printf("b = %f\n",b);

    int c = 23;             //局部变量,不初始化时为随机值
    //全局变量和局部变量名字相重时默认使用局部的变量
    printf("c = %d\n",c); 
    int i,j,k;

    return 0;
}

5、5_count.c

#include <stdio.h>

#define N 30                //宏定义:给一个常量命名

int main(int argc, const char *argv[])
{
    int a = 12;             //= :赋值运算符,从右向左赋值
    a = 012;                //1*8+2
    a = 0x12;               //1*16+2
    printf("a = %d\n",a);

    char c = 'Y';
    printf("c = %c\n",c);


    float f = 12e-3;        //12 * 10^-3
    f = 0.012e+3;           //12 * 10^+3
    printf("f = %f\n",f);


    printf("s = %s\n", "hello");    //'h'  'e'  'l'  'l'  'o'  '\0'
                                    //字符串都是以‘\0’作为结束标志的
    int i = N;
    printf("i = %d\n",i);
    return 0;
}

6、6_expr+.c

#include <stdio.h>

// +  -  *  /  %
int main(int argc, const char *argv[])
{
    int a = 13, b = 9;
    int ret = 0;
//参与运算的数据全是整型数据,结果一定取整
    ret = a/5;                  
    printf("ret = %d\n",ret);

    ret = a%5;                  //% :参与运算的只能是整数
    printf("ret = %d\n",ret);


    int c = 537;
    int ge,shi,bai;

    ge  = c % 10;
    shi = c % 100 / 10;
    bai = c / 100;
    printf("ge = %d  shi = %d  bai = %d\n",ge, shi, bai);

    /*
     *   shi = c / 10 % 10;
     *   shi = c % 100 / 10;
     */

    return 0;
}

7、7_expr++.c

#include <stdio.h>

//自增运算符  ++
//自减运算符  --

int main(int argc, const char *argv[])
{
    int a = 5;
    int b = 6;
//++在变量名的后面:则先参与其他所有运算,再执行自增
    printf("a = %d\n",a++);  
    printf("a = %d\n",a); 

    printf("b = %d\n",b--);  
    printf("b = %d\n",b); 

/*  
    printf("a = %d\n",++a);         // a = a + 1;
    printf("b = %d\n",--b);         // b = b - 1;
*/

    return 0;
}

8、8_expr_relation.c

#include <stdio.h>

//关系运算的结果只有两个值: 真1  假0
//<   <=   >   >=   ==   !=


int main(int argc, const char *argv[])
{
    int a = 0, b = 7;
    int ret = 0;

    ret = a == b;
    printf("ret = %d\n",ret);
    ret = a <= b;
    printf("ret = %d\n",ret);

    //表达式为真执行1, 为假执行2
    if(a<0) 
    {
        //执行体1 
        printf("负数\n");
    }
    else
    {
        //执行体2
        printf("非负数\n");
    }

    return 0;
}

9、9_expr_logic.c

#include <stdio.h>

//逻辑运算的运算结果只有两个值: 真1  假0
//&&   ||    !

int main(int argc, const char *argv[])
{
    int a = 8, b = 10;
    int ret = 0;

    ret = a && b;               //&&  :一假则假
    printf("&& = %d\n",ret);

    ret = a || b;               //||  :一真则真
    printf("|| = %d\n",ret);

    ret = ! b;                  // !  :真变假,假变真
    printf("!  = %d\n",ret);

    //判断a的取值区间,是否实在0 ~ b之间
    if(0 < a  &&  a < b)
    {
        printf("真\n");
    }
    else
    {
        printf("假\n");
    }

    return 0;
}

10、5_bit.c

#include <stdio.h>

//位运算
// &  |   ^   ~  

int main(int argc, const char *argv[])
{
    int a = 16, b = 5;          //a:  0110
    int ret = 0;                //b:  0101
                                //^:  0011
    ret = a & b;
    printf("& = %d\n",ret);

    ret = a | b;
    printf("| = %d\n",ret);

    ret = a ^ b;                //异或:相同为0 不同为1
    printf("^ = %d\n",ret);

    ret = ~b;              
    printf("~ = %d\n",ret);    
    /*   存(数据)  0 0000 0101         ---> 5
     *   ~          1 1111 1010         ---> ~5
     *   读(signed)1 1111 1010   补码
     *               1 1111 1001   反码
     *               1 0000 0110   源码  ---> -6
     */


    ret = a << 2;               //a<<n   <==>  ret = a * 2^n
    printf("<<= %d\n",ret);     

    ret = a >> 3;               //a>>n   <==>  ret = a / 2^n
    printf(">>= %d\n",ret);     




    return 0;
}

11、11_expr=.c

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int a = 5, b = 6;

    //让a与b的数据交换,不使用中间变量
    a ^= b;
    b ^= a;
    a ^= b;
    printf("a = %d\n",a);
    printf("b = %d\n",b);

#if 0
     a   0101
     b   0110
     ________
     a   0011
     b   0110
     ________
     b   0101     -->  5
     a   0011
     ________
     a   0110     -->  6
#endif

/*  
    int t;
    t = a;
    a = b;
    b = t;
*/

    int i = 3, j = 6;
    i += j;             // i = i + j;
    printf("i = %d\n",i);

    return 0;
}

12、12_expr.c

#include <stdio.h>

//sizeof():用于求一个数据开辟空间的大小
//sizeof(类型名);  sizeof(变量)

int main(int argc, const char *argv[])
{
    int a = -2;
    a > 0 ? printf("真\n") : printf("假\n");

    int ret = a > 0 ? 7 : 0;
    printf("ret = %d\n",ret);

//逗号运算符优先级最低,运算的结果由最后一个表达式决定
    ret = (a, 34, a, 17);           
    printf("ret = %d\n",ret);

    float b = 12.34;
    char c = 'G';
    printf("size = %d\n",sizeof(a));
    printf("size = %d\n",sizeof(c));
    printf("size = %d\n",sizeof(short));
    printf("size = %d\n",sizeof(double));


    //(类型)   强制类型转换
    printf("add = %d\n",(int)(12+b));

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值