前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言复习概要(四)

C语言复习概要(四)

作者头像
凯子坚持C
发布2024-10-08 08:02:10
880
发布2024-10-08 08:02:10
举报
文章被收录于专栏:学习

1. 操作符的分类

C语言中的操作符种类繁多,常用的主要操作符可以按照其功能进行如下分类:

  • 算术操作符:用于基本的数学运算,例如加法、减法、乘法和除法。
  • 关系操作符:用于比较两个操作数的关系,返回布尔值(真或假)。
  • 逻辑操作符:用于逻辑运算,如与、或、非等,用于条件判断。
  • 位操作符:按位操作符处理位级别的数据操作。
  • 赋值操作符:将右侧的值赋给左侧变量。
  • 条件操作符(三元运算符):对条件表达式进行判断,并根据条件返回不同的值。
  • 逗号操作符:顺序执行多个表达式,并返回最后一个表达式的值。
  • 其他操作符:包括取地址符号&、指针解引用符*等。
算术操作符

算术操作符用于处理整数和浮点数的基本运算,它们包括加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。

代码示例:更复杂的算术操作

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int a = 15, b = 4;
    float x = 7.5, y = 2.0;

    // 整数算术操作
    printf("a + b = %d\n", a + b); // 加法
    printf("a - b = %d\n", a - b); // 减法
    printf("a * b = %d\n", a * b); // 乘法
    printf("a / b = %d\n", a / b); // 整数除法
    printf("a %% b = %d\n", a % b); // 取模操作

    // 浮点数算术操作
    printf("x + y = %.2f\n", x + y); // 浮点加法
    printf("x - y = %.2f\n", x - y); // 浮点减法
    printf("x * y = %.2f\n", x * y); // 浮点乘法
    printf("x / y = %.2f\n", x / y); // 浮点除法

    // 混合算术操作
    printf("a + x = %.2f\n", a + x); // 整数与浮点混合运算
    printf("b * y = %.2f\n", b * y);

    return 0;
}

在这个例子中,我们展示了整数与浮点数的加法、减法、乘法、除法和取模运算。整数运算和浮点数运算的区别是,整数除法会丢弃小数部分,而浮点运算会保留小数部分。

关系操作符

关系操作符用于比较两个值,并返回一个布尔结果。它们包括:

  • ==:等于。
  • !=:不等于。
  • <:小于。
  • >:大于。
  • <=:小于等于。
  • >=:大于等于。

代码示例:使用关系操作符进行比较

代码语言:javascript
复制
#include <stdio.h>

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

    // 比较 a 和 b
    if (a == b) {
        printf("a 等于 b\n");
    } else {
        printf("a 不等于 b\n");
    }

    if (a < b) {
        printf("a 小于 b\n");
    } else {
        printf("a 不小于 b\n");
    }

    if (a >= 5) {
        printf("a 大于等于 5\n");
    }

    return 0;
}

通过使用关系操作符,可以轻松判断两个操作数之间的大小关系,从而在程序中做出条件判断。关系操作符的返回结果通常用于if语句或其他控制结构中。

逻辑操作符

逻辑操作符用于布尔逻辑运算,包括:

  • &&:逻辑与。如果两个操作数都为真,则结果为真。
  • ||:逻辑或。如果至少一个操作数为真,则结果为真。
  • !:逻辑非。将真值转换为假,将假值转换为真。

代码示例:逻辑操作符在条件判断中的使用

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;

    // 使用逻辑与操作符
    if (a < b && b < c) {
        printf("a 小于 b 且 b 小于 c\n");
    }

    // 使用逻辑或操作符
    if (a > b || b < c) {
        printf("a 大于 b 或者 b 小于 c\n");
    }

    // 使用逻辑非操作符
    if (!(a == b)) {
        printf("a 不等于 b\n");
    }

    return 0;
}

在这个示例中,逻辑与(&&)和逻辑或(||)用于复杂条件判断。逻辑非(!)通常用于反转条件的布尔值,便于简化条件表达式。


2. 二进制制和进制转换

二进制(binary)、八进制(octal)和十六进制(hexadecimal)在低层次的系统编程中非常常见。C语言提供了便捷的方法来表示不同进制的数值。理解二进制数对于掌握位操作符至关重要,而进制转换则是在二进制、十进制和十六进制之间切换。

二进制与十六进制的表示

在C语言中,二进制数通常以0b开头表示,而十六进制数则以0x开头表示。例如,0b1010代表二进制的数字10,而0xA表示十六进制的数字10

代码示例:二进制、八进制和十六进制表示法

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int binaryNum = 0b1010;  // 二进制 1010, 等于十进制 10
    int octalNum = 012;      // 八进制 12, 等于十进制 10
    int hexNum = 0xA;        // 十六进制 A, 等于十进制 10

    printf("二进制数 0b1010 = %d\n", binaryNum);
    printf("八进制数 012 = %d\n", octalNum);
    printf("十六进制数 0xA = %d\n", hexNum);

    return 0;
}

在上述代码中,我们使用了不同的进制表示方法,展示了如何在C语言中处理各种进制表示。printf函数中的%d会将数值转换为十进制输出。

进制转换算法

在实际开发中,我们经常需要将一个进制数转换为另一个进制数。下面我们展示如何手动实现二进制到十进制的转换。

代码示例:手动实现进制转换

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

// 二进制转换为十进制
int binaryToDecimal(int binary) {
    int decimal = 0, i = 0, remainder;

    while (binary != 0) {
        remainder = binary % 10;
        binary /= 10;
        decimal += remainder * pow(2, i);
        ++i;
    }

    return decimal;
}

// 十进制转换为二进制
int decimalToBinary(int decimal) {
    int binary = 0, i = 1, remainder;

    while (decimal != 0) {
        remainder = decimal % 2;
        decimal /= 2;
        binary += remainder * i;
        i *= 10;
    }

    return binary;
}

int main() {
    int binary = 1010;
    int decimal = 10;

    printf("二进制 %d 转换为十进制: %d\n", binary, binaryToDecimal(binary));
    printf("十进制 %d 转换为二进制: %d\n", decimal, decimalToBinary(decimal));

    return 0;
}

这个例子展示了如何手动将二进制转换为十进制,反之亦然。通过简单的算法,可以帮助理解进制转换的过程


3. 原码、反码和补码

原码反码补码是用于表示负数的不同方法,它们在底层编程中极其重要,特别是在涉及位操作时。C语言使用补码来表示负数,这是因为它可以简化硬件加减法操作。

原码

原码是最简单的表示方法,使用符号位来区分正负号。最高位为0表示正数,为1表示负数。例如:

  • +5的原码是:00000101
  • -5的原码是:10000101
反码

反码是对原码的符号位保持不变,其余位按位取反。正数的反码与原码相同,而负数的反码则是在正数基础上按位取反。例如:

  • +5的反码是:00000101
  • -5的反码是:11111010
补码

补码是计算机中最常用的表示负数的方法。负数的补码是反码加1。这样可以简化硬件中的加减法操作。例如:

  • +5的补码是:00000101
  • -5的补码是:11111011

代码示例:理解补码的表示

代码语言:javascript
复制
#include <stdio.h>

int main() {
    signed char a = 5;   // 原码: 00000101
    signed char b = -5;  // 补码: 11111011

    printf("5 的二进制补码: %d\n", a);
    printf("-5 的二进制补码: %d\n", b);

    return 0;
}

在上面的例子中,计算机内部存储负数的方式是通过补码完成的,理解补码对于进行位操作和低级编程非常重要。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算术操作符
  • 关系操作符
  • 逻辑操作符
  • 2. 二进制制和进制转换
    • 二进制与十六进制的表示
      • 进制转换算法
      • 3. 原码、反码和补码
        • 原码
          • 反码
            • 补码
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档