当前位置: 首页 > news >正文

C语言复习概要(四)

在这里插入图片描述

本文

      • 1. 操作符的分类
        • 算术操作符
        • 关系操作符
        • 逻辑操作符
      • 2. 二进制制和进制转换
        • 二进制与十六进制的表示
        • 进制转换算法
      • 3. 原码、反码和补码
        • 原码
        • 反码
        • 补码


1. 操作符的分类

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

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

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

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

#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;
}

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

关系操作符

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

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

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

#include <stdio.h>int main() {int a = 10, b = 20;// 比较 a 和 bif (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语句或其他控制结构中。

逻辑操作符

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

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

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

#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

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

#include <stdio.h>int main() {int binaryNum = 0b1010;  // 二进制 1010, 等于十进制 10int octalNum = 012;      // 八进制 12, 等于十进制 10int hexNum = 0xA;        // 十六进制 A, 等于十进制 10printf("二进制数 0b1010 = %d\n", binaryNum);printf("八进制数 012 = %d\n", octalNum);printf("十六进制数 0xA = %d\n", hexNum);return 0;
}

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

进制转换算法

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

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

#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

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

#include <stdio.h>int main() {signed char a = 5;   // 原码: 00000101signed char b = -5;  // 补码: 11111011printf("5 的二进制补码: %d\n", a);printf("-5 的二进制补码: %d\n", b);return 0;
}

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



http://www.mrgr.cn/news/44470.html

相关文章:

  • 基于SpringBoot vue3 的山西文旅网java网页设计与实现
  • 国庆练习(Day24)
  • vscode提交修改Failed to connect to github.com port 443: Timed out
  • 一个典型的cmakelists.txt
  • 【星汇极客】单片机竞赛之2024睿抗机器人大赛-火线速递赛道(持续更新)
  • 向量数据库!AI 时代的变革者还是泡沫?
  • 产品经理内容分享(一):AI产品经理需必备那些能力
  • [Day 85] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 网络安全学习(记录学习过程)
  • 点餐小程序实战教程16餐厅管理
  • 低温无压烧结银在射频通讯上的5大应用
  • 【JavaEE】【多线程】进程与线程的概念
  • [Linux] 进程创建、退出和等待
  • 77寸OLED透明触摸屏有哪些应用场景
  • IL2CPP和Mono的区别
  • LeetCode 123. 买卖股票的最佳时机 III(经典必会)
  • LeetCode题练习与总结:给表达式添加运算符--282
  • 台湾高雄三维倾斜摄影模型3DTiles样例数据介绍
  • 自己写计算字符串长度的函数--3种写法(C语言)
  • 实战OpenCV之模板匹配