C语言入门2

前言

5 运算符介绍 

5.1 算数运算符

算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多。

运算符运算范例结果
+正号+33
-负号b=4;-b-4
+5+16
-6-24
*2*36
/5/51
%取模(取余)7%52

++

自增(前):先运算后取值

自增(后):先取值后运算

a=2;b=++a;

a=2;b=a++;

a=3;b=3

a=3;b=2;

--

自减(前):先运算后取值

自减(后):先取值后运算

a=2;b=--a;

a=2;b=a--;

a=1;b=1

a=1;b=2

5.1.1 / 和 % 的使用

/ 的使用:整数除以一个整数还是一个整数,有小数的部分都将会截断,希望保留小数就必须在运算中有浮点数参加。(见下面代码)

%的使用:取模运算只能使用在整数的计算中,给出一个取模公式:a % b = a - a / b * b。

#include <stdio.h>

int main()
{
    // 处理流程 10 / 4 = 2.5  截取整数===》2 ==》2.0000
    double d1 = 10 / 4;
    double d2 = 10 / 4.0; //如果希望保留小数,参与运算必须有浮点数

    int n1 = -10 / 3; //-3
    int n2 = 10 / -3; //-3

    // 取模公式
    // a % b = a - a / b * b (C语言中的计算)
    int res1 = 10 % 3; // 求10/3的余数1
    int res2 = -10 % 3; //-10 - (-10) / 3 * 3 = -10 - (-3) * 3 = -1
    int res3 = 10 % -3; // 10 - 10 / (-3) * (-3) = 10 - (-3) * (-3) = 1

    printf("d1 = %f, d2 = %f\n", d1, d2);
    printf("n1 = %d, n2 = %d\n", n1, n2);
    printf("res1 = %d, res2 = %d, res3 = %d\n", res1, res2, res3);
    return 0;
}

运行结果:

d1 = 2.000000, d2 = 2.500000
n1 = -3, n2 = -3
res1 = 1, res2 = -1, res3 = 1

5.1.2 ++ 和 -- 的使用 

前置:a = ++b

        变量自增(减)1;

        取变量值。

后置:a = b++

        取变量值;

        变量自增(减)1。

#include <stdio.h>

int main()
{
    int i = 10;

    int j = i++; // j = i; i = i + 1; ===> j =10, i =11
    printf("i = %d, j = %d\n", i, j); 

    int k = ++i; // i = i + 1; k = i; ===> k = 12; i = 12;
    printf("i = %d, k = %d\n", i, k);

    // ++ 和 -- 可以独立使用,就相当于自增或者自减
    // i++ ===> i = i + 1
    // ++i ===> i = i + 1
    // 如果独立使用 i++ 和 ++i 完全等价
    i++; // i = 13
    printf("i = %d\n", i);

    ++i; // i = 14
    printf("i = %d\n", i);

    return 0;
}

运行结果: 

i = 11, j = 10
i = 12, k = 12
i = 13
i = 14

5.2  关系运算符(比较运算符)

 5.2.1 关系运算符简介

1)关系运算符的结果要么是真(非0表示,默认使用1),要么是假(0表示);

2)关系运算符组成的表达式,被称之为关系表达式;

3)比较运算符 "=="(关系运算符)不能误写成 "="(赋值)。

#include <stdio.h>

int main()
{
    int a = 10, b = 11;

    printf("a > b = %d\n", a > b); // 0
    printf("a < b = %d\n", a < b); // 1
    printf("a >= b = %d\n", a >= b); // 0
    printf("a <= b = %d\n", a <= b); // 1
    printf("a == b = %d\n", a == b); // 0 
    printf("a != b = %d\n", a != b); // 1

    return 0;
}

 5.3 逻辑运算符

5.3.1 逻辑运算符简介

假设变量A的值为1,变量B的值为0,逻辑运算符的表达见下表:

运算符描述例子
&&逻辑与,如果两个操作数都为非0(真),则条件为真,否则结果为0(假)(A && B)为假
||逻辑或,如果两个操作数中有任意一个非0(真),则结果为真(A || B)为真
逻辑非,逆转操作数的逻辑状态,如果条件为真则逻辑非运算符将使其为假!(A && B)为真

 5.3.2 逻辑运算符的注意事项

逻辑与(&&):在进行&&操作时,如果第一个条件为false,则后面的条件不在判断。

这种现象称之为短路现象,所以逻辑与也称之为短路逻辑与。

逻辑或(||):在进行||操作时,如果第一个条件为真,则不再执行后面的条件,整个结果为真。

这种现象称之为逻辑或短路现象,因此逻辑或也称之为短路逻辑或。

 短路逻辑与代码演示:

#include <stdio.h>

int main()
{
    int a = 10, b = 20;

    if ((a < 5) && (++b > 20))
        printf("真真真\n");
    
    printf("b = %d\n", b); // b = 20

    if ((a > 5) && (++b > 20))
        printf("真真真\n");
    
    printf("b = %d\n", b); // b = 21

    return 0;
}

 短路逻辑或代码演示: 

#include <stdio.h>

int main()
{
    int a = 5, b =20;

    if ((a > 5) || (++b > 20))
        printf("真真真\n");
    
    printf("b = %d\n", b); // b = 20

    if ((a < 5) || (++b > 20))
        printf("真真真\n");
    
    printf("b = %d\n", b); // b = 21

    return 0;
}

 5.4 赋值运算符

5.4.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

5.4.2 赋值运算符特点

1)运算顺序从右到左;

2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值;

3)复合赋值运算符的表达含义:a += 3 ===> a = a + 3。

5.5 位运算符

5.5.1 原码、反码、补码

对于有符号的而言: 

1)二进制的最高位时符号位:0表示正数,1表示负数;

2)正数的原码、反码、补码都一样(三码合一);

3)负数的反码 = 它的源码符号位不变,其它位取反(0 -> 1, 1 -> 0);

4)负数的补码 = 它的反码 + 1;

5)0的反码、补码都是0;

6)在计算机运算的时候,都是以补码的方式来运算的。‘

5.5.2 位运算符的简介

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

运算符描述
&按位与操作,按二进制位进行“与”操作。运算规则:0&0=0;0&1=0;1&0=0;1&1=1
|按位或操作,按二进制位进行“或”操作。运算规则:0|0=0;0|1=1;1|0=0;1|1=1
^按位异或操作,按二进制位进行“异或”操作。运算规则:0^0=0;0^1=1;1^0=1;1^1=0
~按位取反运算,按二进制位进行“取反”运算。运算规则:~1=0;~0=1
<<按位左移运算,将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
>>按位右移运算,将一个数的个二进制位全部右移若干位,正数左边补0,负数左边补1,右边丢弃。 

5.5.3  位运算符说明

1)按位与&:两位全为1,结果为1,否则为0;

2)按位或|:两位有一个为1,结果为1,否则为0;

3)按位异或^:两位一个为0,一个为1,结果为1,否则为0;

4)按位取反~:0 -> 1,1 -> 0;

5)算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位;

6)算数左移<<:符号位不变,低位补0;

7)逻辑左移和逻辑右移是针对无符号整数的。

 举例说明:

在计算机运算的时候,都是以补码的方式来运算的。

 5.6 三元运算符

5.6.1 基本语法

条件表达式?表达式1:表达式2

1)如果条件表达式为真,运算后的结果为表达式1;

2)如果条件表达式为假,运算后的结果为表达式2;

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 15;
    int res = a > b ? a++ : b--;

    printf("a = %d, b = %d, res = %d\n", a, b, res); // a = 10, b = 16, res = 15
    return 0;
}

5.7 标识符的命名规则和规范

5.7.1 标识符概念

1)C语言对各种变量、函数等命名时使用的字符序列称为标识符;

2)凡是自己可以起名字的地方都叫标识符。

5.7.2 标识符的命名规则

1)由26个英文字母大小写,0-9,_或$组成;

2)数字不可以开头;

3)不可以使用关键字和保留字,但能包含关键字和保留字;

4)C语言中严格区分大小写,长度无限制;

5)标识符不能包含空格。

5.7.3 标识符命名规范 

1)程序中不得出现仅靠大小写区分的相似标识符;

例如:int x,X; 变量x和X容易混淆

2)所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分割单词;

例如:const double TXA_RATE = 0.09;

        #define FILE_PATH "/usr/temp"

3)定义变量别忘记初始化。定义变量时编译器并不一定清空了这块内存,它的的值可能时无效的数据,运行程序,会异常退出;

4)变量名、函数名:多单词组成时,第一个单子首字母小写,第二个单词开始每个单词首字母大写:temp_Power(驼峰法,小驼峰)

每个单词的首字母都大写:TankShotGame(大驼峰) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值