三、运算符与表达式:算术运算符;赋值运算符;关系运算符;逻辑运算符;杂项运算符:sizeof()、&、*、三目运算? :、逗号运算符;运算符优先级;类型转换

运算符类型 作用
算术运算符 用于处理四则运算
赋值运算符 用于将表达式的值赋给变量
比较运算符 用于表达式的比较,并返回一个真值或假值
逻辑运算符 用于根据表达式的值返回真值或假值
位运算符 用于处理数据的位运算
sizeof运算符 用于求字节数长度

 

复制代码
算术运算符
=============================================================================
运算符        描述                                        实例
+            把两个操作数相加                        A + B 将得到 30
-            从第一个操作数中减去第二个操作数        A - B 将得到 -10
*            把两个操作数相乘                        A * B 将得到 200
/            分子除以分母                            B / A 将得到 2
%            取模运算符,整除后的余数                B % A 将得到 0
++            自增运算符,整数值增加 1                A++ 将得到 11
--            自减运算符,整数值减少 1                A-- 将得到 9

    不允许对小数取余。余数不能是 小数。 35 % 3.4;
    对负数取余,结果为余数的绝对值。10 % -3;  --》 1
算术运算符
复制代码

 

复制代码
赋值运算符
=============================================================================
运算符                                    描述                                                                    实例
=            简单的赋值运算符,把右边操作数的值赋给左边操作数                                    C = A + B 将把 A + B 的值赋给 C
+=            加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数                    C += A 相当于 C = C + A
-=            减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数                    C -= A 相当于 C = C - A
*=            乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数                    C *= A 相当于 C = C * A
/=            除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数                    C /= A 相当于 C = C / A
%=            求模且赋值运算符,求两个操作数的模赋值给左边操作数                                    C %= A 相当于 C = C % A
<<=            左移且赋值运算符                                                                    C <<= 2 等同于 C = C << 2
>>=            右移且赋值运算符                                                                    C >>= 2 等同于 C = C >> 2
&=            按位与且赋值运算符                                                                    C &= 2 等同于 C = C & 2
^=            按位异或且赋值运算符                                                                C ^= 2 等同于 C = C ^ 2
|=            按位或且赋值运算符                                                                    C |= 2 等同于 C = C | 2
赋值运算符
复制代码

 

复制代码
关系运算符
=============================================================================
C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。
运算符                        描述                                                实例
==            检查两个操作数的值是否相等,如果相等则条件为真。                    (A == B) 为假。
!=            检查两个操作数的值是否相等,如果不相等则条件为真。                    (A != B) 为真。
>            检查左操作数的值是否大于右操作数的值,如果是则条件为真。            (A > B) 为假。
<            检查左操作数的值是否小于右操作数的值,如果是则条件为真。            (A < B) 为真。
>=            检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。        (A >= B) 为假。
<=            检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。        (A <= B) 为真。
关系运算符
复制代码

 

复制代码
逻辑运算符
=============================================================================
C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。
运算符    描述                                                                                 实例
&&        称为逻辑与运算符。如果两个操作数都非零,则条件为真。                                (A && B) 为假。
||        称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。                        (A || B) 为真。
!        称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。    !(A && B) 为真
            !非0整数 ---> 00       ---> 1
逻辑运算符
复制代码

 

位运算符:位运算符作用于位,并逐位执行操作。

 

复制代码
杂项运算符:sizeof()、&、*、三目运算? :、逗号运算符
=============================================================================
运算符            描述                        实例
sizeof()    返回变量的大小。            sizeof(a) 将返回 4,其中 a 是整数。
&            返回变量的地址。            &a; 将给出变量的实际地址。
*            指向一个变量。                *a; 将指向一个变量。
? :            条件表达式                    如果条件为真 ? 则值为 X : 否则值为 Y
,           逗号运算符

---------------------------------------------------------------------------------
三目运算符: ? :

    表达式1 ? 表达式2 : 表达式3
    表达式1 是一个判别表达式。 如果为真。整个三目运算,取值表达式2。
                    如果为假。整个三目运算,取值表达式3。
    默认结合性。自右向左。
    
---------------------------------------------------------------------------------
// 逗号运算符
int main(void)
{
    int a = 10, b = 20, c = 30;

    int x = (a = 1, c = 5, b = 2);        // 逗号运算符。
    //逗号运算符:会执行各个表达式,然后将最后一个表达式的值赋值给x,所以此处x=2

    printf("x = %d\n", x);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);

    system("pause");
    return EXIT_SUCCESS;
}
杂项运算符:sizeof()、&、*、三目运算? :、逗号运算符
复制代码

 

C 中的运算符优先级

 

复制代码
类型转换种类;自动转换(隐式转换);强制类型转换
========================================================================
类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换的方法有两种:
    自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
    强制类型转换:把表达式的运算结果强制转换成所需的数据类型。

--------------------------------------------------------------------------
自动转换规则:
    占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
        由编译器自动完成。
        由赋值产生的类型转换。 小--》大 没问题。 大 --》 小 有可能发生数据丢失。
        
        高       double      <--- float
        ^          ^
        |          |
        |         long
        |          ^
        |          |
        |     unsignen int
        |          ^
        |          |
        低      signen int   <--- char,short

        ---------------------------------
        示例:
        int r = 3;
        float s = 3.14 * r * r; //隐含了2次类型转换:1.在做乘法时,r是int类型,3.14是double类型,都需要转换为double类型再进行计算;2.在赋值时进行类型转换,表达式的结果是double类型,但是要赋值给float,需要进行类型转换
        -------------------------------
        int a = 321;
        char ch = a;   //隐式类型转换,int转换为char类型,int 4字节,char1字节,所以会丢数据
        打印以%d来打印ch,结果显示为65,说明char使用了int的最后一个字节,其他都丢弃了。。。
// 隐式类型转换。
int main(void)
{
    int a = 321;        
    char ch = a;
    printf("ch = %d\n", ch);
    system("pause");
    return EXIT_SUCCESS;
}
int main(void)
{
    int a = 321;
    char ch = a;
    printf("%d\n", ch);        //65    //隐式类型转换,int转换为char类型,int 4字节,char1字节,所以会丢数据
    printf("%c\n", ch);        //A
    printf("112233\n" );    //字符串是可以直接打印的
    //printf(a );            //变量不能直接打印,会报错
    //printf("%s", ch);        //这个也报错,应该是后续没碰到\0,碰到了一些莫名其妙的东西,或者说win10的vs进行了优化吧。。。
    //printf(ch);            //变量不能直接打印,会报错

    system("pause");
    return EXIT_SUCCESS;
}

--------------------------------------------------------------------------
强制类型转换:
     语法:    (type_name) expression
        大多数用于函数调用期间,实参给形参传值。
        
// 强制类型转换
int main(int var)
{
    //int *p = (int *)malloc(100);          //强制类型转换
    float price = 3.6;
    int weight = 4;
    
    //double sum = (int)price * weight;     //强制类型转换
    double sum = (int)(price * weight);     //强制类型转换

    printf("价格:%lf\n", sum);

    system("pause");
    return EXIT_SUCCESS;
}
类型转换种类;自动转换(隐式转换);强制类型转换
复制代码

 

posted @   雲淡風輕333  阅读(174)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示