02 C各种运算符

1、算术运算符

#include <stdio.h>

int main()
{
    /*
     * 1.什么是算数运算符?
     * + - * / %
     */
    // 加法
    int result;
//    result = 1 + 1;
//    int num1 = 2;
//    int num2 = 2;
//    result = num1 + num2;
//    result = num1 + 1;

    // 减法
//    result = 1 - 1;

    // 乘法
//    result = 2 * 2;

    // 除法
//    result = 10 / 5;

    // 取余
    // 被除数 除数 商  余数
    // 10   ÷ 3 = 3   1
    result = 10 % 3;
    printf("result = %i\n", result);
    return 0;
}

#include <stdio.h>

int main()
{
    /*
     * 注意点:
     * 1.+ - * /
     * 在+ - * / 运算中, 如果整数和整数运算, 那么得到的结果一定是整数, 如果整数和小数运算, 那么得到的结果一定是小数
     * 2.%
     * 2.1在%运算中, 不能出现小数(%运算只能计算整数)
     * 2.2在%运算中, 如果被除数小于除数, 那么结果就是被除数
     * 2.3在%运算中, 如果被除数是0, 那么结果就是0
     * 2.4在%运算中, 结果的正负性, 取决于被除数的正负性(被除数如果正数, 那么结果就是正数, 被除数如果是负数, 那么结果就是负数)
     */
//    double result;
//    result = 10 / 3; // 3
//    result = 10 / 3.0; // 3.333333
//    result = 10.0 / 3; // 3.333333
//    result = 10.0 / 3.0; // 3.333333
//    printf("result = %lf\n", result);
    int result;
//    result = 10 % 3;
//    result = 10 % 3.0;
//    result = 10.0 % 3;
//    result = 2 % 3;
//    result = 0 % 3;
//    result = 10 % -3; // 1
    result = -10 % 3; // -1
    printf("result = %i\n", result);
    return 0;
}

#include <stdio.h>

int main()
{
    // 1.C语言中只有相同类型数据才能进行运算
    // 2.C语言只要发现参与运算的变量或者常量不是同一类型, 就会自动将小类型转换为大类型
    // 3.参与运算的是什么类型, 得到的结果就是什么类型
    int a = 10;
    double b = 3.14;
    // 此处a和b类型不同, 编译器会自动将小类型转换为大类型
    // a是int占用4个字节, b是double占用8个字节, 所以a是小类型
    // 运算时会将a转换为double再运算
    // 相当于   res = 10 + 3.14; --> res = 10.0 + 3.4
    double res = a + b;
    // 参与运算的是什么类型, 结果就是什么类型, 参与运算的都是double,所以结果是double
    printf("res = %lf\n", res);
    // 以上这种规则我们称之为: 运算转换(自动类型转换)


    int c = 10;
    double d = c;
    // 在赋值时会自动将等号右边的类型转换为等号左边的类型
    // 以上这种规则我们称之为: 赋值转换(自动类型转换)

    double e = 3.14;
    int f = (double)e;
    // 只要在变量或者常量前面加上(数据类型), 就会强制将变量或者常量转换为指定类型
    // 以上这种规则我们称之为: 强制类型转换
    return 0;
}

2、赋值运算符

#include <stdio.h>

int main()
{
    /*
     * 赋值运算符
     * 1.简单赋值运算符
     * =
     * 2.复杂赋值运算符
     * += -= *= /= %=
     */
    // 1.简单赋值运算符
    // 作用: 将等号右边的值赋值给等号左边的变量
    // 结合性: 右结合性
    int num;
    num = 666;
    printf("num = %i\n", num);

    // 2.复杂赋值运算符
    int value = 10;
//    value += 5; // value = value + 5; value = 10 + 5;
//    value -= 5; // value = value - 5; value = 10 - 5;
    value *= 2; // value = value * 2; value = 10 * 2;
    printf("value = %i\n", value);
    return 0;
}

#include <stdio.h>

int main()
{
    /*
     * 1.赋值运算符结合性
     * 右结合性
     * 2.优先级
     * 赋值运算符的优先级 低于 算数运算符
     */
//    int res = 10;
//    res += 10 - 5; // res = res + (10 - 5); res = 10 + (10 - 5);
//    printf("res = %i\n", res);

    int num = 10;
    num += 5; // num = num + 5;

    int value = 10;
    value += 2 + 2; // value = value + (2 + 2);


    int temp = 2 + 2;
    printf("temp = %i\n", temp);
    return 0;
}

3、自增自减运算符

#include <stdio.h>

int main()
{
    // 要求给一个变量+5
    int num = 10;
//    num = num + 5;
//    num += 5;

    // 要求给一个变量+1
//    num = num + 1;
//    num += 1;


    /*
     * 自增作用: 快速的给一个变量+1
     * 格式: ++
     * 只要在一个变量的后面或者前面写上++, 就代表要给这个变量+1
     * 自减作用: 快速的给一个变量-1
     * 格式: --
     * 只要在一个变量的后面或者前面写上--, 就代表要给这个变量-1
     */
//    num++;
//    ++num;
//    num--;
    --num;
    printf("num = %i\n", num);
    return 0;
}

#include <stdio.h>

int main()
{
    /*
     * 自增和自减可以写在变量前面, 也可以写在变量后面
     * 写在前面和后面的区别:
     * 如果自增和自减写在变量前面, 代表先自增和自减再参与其它运算
     * 如果自增和自减写在变量后面, 代表先参与其它运算再自增和自减
     */
    /*
    int num = 10;
//    int res = 10 + num++; // int res = 10 + 10; num++
    int res = 10 + num--; // int res = 10 + 10; num--
    printf("res = %i\n", res); // 20 20
    printf("num = %i\n", num); // 11 9
    */

    int num = 10;
//    int res = 10 + ++num; // ++num; int res = 10 + 11
    int res = 10 + --num; // --num; int res = 10 + 9
    printf("res = %i\n", res); // 21 19
    printf("num = %i\n", num); // 11 9

    return 0;
}
#include <stdio.h>

int main()
{
    /*
     * 注意点:
     * 1.自增和自减只能用于变量, 不能用于常量和表达式
     * 2.在企业开发中自增和自减最好单独出现
     * 3.同一个表达式中同一个变量同时自增或自减, 这种格式的表达式在C语言中没有规定如何运算
     * 所以结果是不确定的, 在不同的编译器下运行的结果不同
     */
    /*
    int num = 10;
    num++;
    num--;

//    10++; // 会报错

    int a, b;
    a = 10;
    b = 20;
    (a + b)++;
    */

    /*
    int num = 10;
//    int res = 10 + num++; // int res = 10 + 10; num++;
//    int res = 10 + num;
//    num++;
//    int value = num++;
    int value = num;
    num++;
    printf("value = %i\n", value); // 10
    printf("num = %i\n", num); // 11
    */

    int num = 10;
    int res = ++num + ++num; // 千万不要这样写
    printf("res = %i\n", res);

    return 0;
}

4、sizeof运算符

#include <stdio.h>

int main()
{
    /*
     * sizeof运算符
     * 格式:
     * 第一种格式:
     * sizeof(变量/常量/数据类型);
     * 第二种格式:
     * sizeof 变量/常量
     * 作用:
     * sizeof运算符是专门用于计算变量/常量/数据类型占用的存储空间的
     */
    int num = 10; // 4个字节
    // 计算变量
//    int res = sizeof(num);
//    int res = sizeof num;
    // 计算常量
//    int res = sizeof(3.14);
//    int res = sizeof 3.14;
    // 计算数据类型
//    int res = sizeof(char);
//    int res = sizeof char; // 会报错, 不能省略()
    printf("res = %i\n", res);
    return 0;
}

#include <stdio.h>

int main()
{
    /*
     * 1.sizeof是一个运算符, 不是一个函数
     * 2.既然sizeof是一个运算符, 所以它也有优先级
     * sizeof运算符的优先级高于算数运算符
     */
    //               double int           double double          double
//    int res = sizeof(3.14 + 1); // sizeof(3.14 + 1.0) --> sizeof(4.14)
//    printf("res = %i\n", res);

    // 由于sizeof的优先级高于算数运算符
    // 所以会先计算 sizeof 3.14 --> 8
    // 然后再利用计算结果和1相加  8 + 1 == 9
//    int res = sizeof 3.14 + 1;
    int res = sizeof(3.14) + 1;
    printf("res = %i\n", res);
    return 0;
}

5、逗号运算符

#include <stdio.h>

int main()
{
    /*
     * 1.逗号在C语言中也是一个运算符
     * 2.作用: 一般用于简化代码
     * 3.注意点: 既然逗号是一个运算符, 所有的运算符都有结果
     * 逗号运算符的运算结果是最后一个表达式的值
     * 逗号在运算符的结核性是左结合
     */
    /*
    // 应用场景
    // 同时定义多个变量
    int a, b;
    // 同时给多个变量赋值
    a = 10, b = 20;
    */
    // 面试
    int a, b, c;
    a = 10, b = 20, c = 30;
    // int res = ((10 + 20), (10 + 30));
    int res = ((a + b), (a + c));
    printf("res = %i\n", res);

    return 0;
}

6、关系运算符

#include <stdio.h>

int main()
{
    /*
     * 关系运算符
     * > >= < <= == !=
     * 返回值: 要么是0, 要么是1
     * 0 代表关系不成立 1代表关系成立
     * 在C语言中非0即真
     * 只有数值是0 才代表是假, 其它的都是真 -1 1 666 999
     *
     * 关系运算符的结核性
     * 左结合性
     *
     * 优先级
     * > >= < <= 优先级高于 == !=
     * 如果优先级和结合性同时存在的时, 先优先级后结合性
     */
    /*
    int a, b;
    a = 10, b = 5;
//    int res = a > b;
//    int res = a < b;
//    int res = 10 == 10;
    int res = 11 != 10;
    printf("res = %i\n", res);
    */
    // int res = (10 > 5) > 3
    // int res = (1) > 3
//    int res = 10 > 5 > 3;

    // int res = 10 == (10 > 9)
    // int res = 10 == (1)
//    int res = 10 == 10 > 9;
//    printf("res = %i\n", res);

    // 结论: 不要使用关系运算符判断区间
    // int res = (20 >= 15) >= 10;
    // int res = (1) >= 10;
    int x = 15;
    int res = 20 >= x >= 10;

    return 0;
}

7、逻辑运算符

#include <stdio.h>

int main()
{
    /*
     * 逻辑运算符
     * 1.逻辑与 &&
     * 格式: 表达式 && 表达式
     * 结果: 和关系运算符一样 0 和 1
     * 规则: 一假则假
     * 2.逻辑或 ||
     * 格式: 表达式 || 表达式
     * 结果: 和关系运算符一样 0 和 1
     * 规则: 一真则真
     * 3.逻辑非 !
     * 格式: !表达式
     * 结果: 和关系运算符一样 0 和 1
     * 规则: 真变假假变真
     */
    /*
    //         表达式1      表达式2
    //         1(真)         1(真)
    //        10 > 5 并且 20 > 19
//    int res = (10 > 5) && (20 > 19);
    //         0(假)         1(真)
//    int res = (10 > 11) && (20 > 19);
    //         1(真)         0(假)
    int res = (10 > 9) && (20 > 29);
    printf("res = %i\n", res); // 1 0
    */

    /*
    //          1(真)  ||   1(真)
//    int res = (10 > 9) || (20 > 8);
    //          0(假)  ||   1(真)
//    int res = (10 > 11) || (20 > 8);
    //          1(真)  ||   0(假)
    int res = (10 > 1) || (20 > 28);
    printf("res = %i\n", res);
    */

    //        !1(真)
//    int res = !(10 > 9);
    //        !0(假)
    int res = !(10 > 19);
    printf("res = %i\n", res);
    return 0;
}
#include <stdio.h>

int main()
{
    /*
     * 1.逻辑与 &&
     * 结合性: 左结合性
     * 特点: 逻辑短路, 只要第一个表达式为假, 那么第二个表达式就不会计算
     * 因为规则是: 一假则假
     * 2.逻辑或 ||
     * 结合性: 左结合性
     * 特点: 逻辑短路, 只要第一个表达式为真, 那么第二个表达式就不会计算
     * 3.逻辑 !
     * 结合性: 右结合性
     * 特点: 可以连续飞飞飞飞
     */

    /*
    int a = 10; // 11
    //          1(真)  &&  1(真)
//    int res = (10 > 9) && (++a > 5);
    //          0(假)   &&
    // 原因: 无论第二个表达式的结果是真是假, 整个表达式的结果都是假, 所以再计算第二个表达式没有任何意义, 所以只要第一个表达式为假, 第二个表达式就不会运算
    int res = (10 > 19) && (++a > 5);
    printf("res = %i\n", res); // 1(真)   0(假)
    printf("a = %i\n", a); // 11   10
    */

    /*
    int a = 10; // 11
    //          1(真)  ||
    // 原因: 无论第二个表达式的结果是真是假, 整个表达式的结果都是真, 所以再甲酸第二个表达式没有任何意义, 所以只要第一个表达式为真, 第二个表达式不会运算
//    int res = (10 > 9) || (++a > 5);
    //          0(假)   ||     1(真)
    int res = (10 > 19) || (++a > 5);
    printf("res = %i\n", res); // 1(真) 1(真)
    printf("a = %i\n", a); // 10  11
    */

    /*
    //        (!(!(!(10 > 9))))
    //        (!(!(!1)))
    //        (!(!0))
    //        (!1)
    int res = !!!(10 > 9);
    printf("res = %i\n", res);
    */
    // 注意点:
//    int res = !666;
//    int res = !0;

//    int res = 666 && 888;
    int res = 666 && 0;
     printf("res = %i\n", res); // 0 1
    return 0;
}

8、三目运算符

#include <stdio.h>

int main()
{
    /*
     * 三目运算符
     * 格式: 表达式 ? 结果A : 结果B;
     * 结果:
     * 表达式的值为真, 那么就返回结果A
     * 表达式的值为假, 那么就返回结果B
     * 注意点:
     * 三目运算符中 ?:不能分开使用
     * 三目运算符的优先级低于算数运算符
     */

    /*
    int a, b;
    a = 10, b = 15;
    //          1(真)
    //          0(假)
    int res = a > b ? a : b;
    printf("res = %i\n", res);
    */
    //          15   >   10 ? 666 : 888
    //          1(真) ? 666 : 888
//    int res = 10 + 5 > 5 + 5 ? 666 : 888;
//    int res = (10 + 5 > 5 + 5) ? 666 : 888;
    int temp1 = 10 + 5;
    int temp2 = 5 + 5;
    int res = (temp1 > temp2) ? 666 : 888;
     printf("res = %i\n", res);

     // 作业:
     // 1.从键盘输入一个整数, 判断这个整数时候是100~200之间的一个数
     // 2.从键盘输入两个整数, 找出最大值, 然后输出最大值
     // 3.从键盘输入三个整数, 找出最大值, 然后输出最大值
     // 提示: 先写注释, 再写代码
     // 例如:
     // 1.定义变量保存用户输入的数据
     // 2.提示用户如何输入数据
     // 3.接收用户输入的数据
     // 4.利用逻辑运算符判断是否在某个区间内
     // 5.在区间内输出YES, 不在区间内输出NO
    return 0;
}
#include <stdio.h>

int main()
{
    /*
     // 1.从键盘输入一个整数, 判断这个整数是否是100~200之间的一个数
     // 2.从键盘输入两个整数, 找出最大值, 然后输出最大值
     // 3.从键盘输入三个整数, 找出最大值, 然后输出最大值
     */

    // 1.定义变量保存用户输入的数据
    int num = -1;
    // 2.提醒用户如何输入
    printf("请输入一个整数, 以回车结束\n");
    // 3.接收用户输入的数据
    scanf("%i", &num);
    // 4.判断是否是100~200之间的数
    int res = num >= 100 && num <= 200;
    // 5.输出判断的结果
    res ? printf("是100~200之间的数"): printf("不是100~200之间的数");

    return 0;
}

#include <stdio.h>

int main()
{
    // 从键盘输入两个整数, 找出最大值, 然后输出最大值

    // 1.定义两个变量保存用户输入的数据
    int a, b;
    a = -1, b = -1;
    // 2.提醒用户如何输入数据
    printf("请输入两个整数, 用逗号隔开, 以回车结束\n");
    // 3.接收用户输入的数据
    scanf("%i,%i", &a, &b);
    // 4.判断两个整数谁比较大, 拿到比较大的那个整数
    int max = (a > b) ? a : b;
    // 5.输出最大值
    printf("max = %i\n", max);
    return 0;
}
#include <stdio.h>

int main()
{
    // 从键盘输入三个整数, 找出最大值, 然后输出最大值
    // 1.定义三个变量用于保存用户输入的数据
    int a, b, c;
    a = -1, b = -1, c = -1;
    // 2.提示用户如何输入数据
    printf("请输入三个整数, 以逗号隔开, 以回车结束\n");
    // 3.接收用户输入的数据
    scanf("%i,%i,%i", &a, &b, &c);
    // 4.先比较某两个变量, 取出最大值
    int max = (a > b) ? a : b;
    // 5.利用刚才取出的最大值和剩余的变量比较
    max = (max > c) ? max : c;
    // 6.输出结果
    printf("max = %i\n", max);

    int min; // 定义变量, 会开辟存储空间
    min; // 使用变量
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 弟弟总是讲鬼故事吓我,每次看见我被他的鬼故事吓得逃跑的时候,他总是取笑我,这次我决定扮鬼吓吓他,“ 哈哈哈”...
    莫忧甜阅读 349评论 0 2
  • 春娇志明系列电影的第三部《春娇救志明》下个月底才上映,而19日它的全球首映票开售五分钟即售罄。作为迷妹之一我也只能...
    百忧解阅读 3,829评论 2 1
  • 我是过农历七月的生日,所以,今天身边好友买了小花盆型蛋糕。蛋糕不大,小小的,但是,装载的却不仅仅是三言两语可以说完...
    闲散25划阅读 179评论 0 0
  • 把枪藏进风衣 乘着火车去找你 用热吻将掠过肺的烟送你 尝尝吧 尝尝我的愁 再不回家 就杀了你
    性简阅读 553评论 1 2