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 和 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语句或其他控制结构中。

逻辑操作符

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

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

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

#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, 等于十进制 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会将数值转换为十进制输出。

进制转换算法

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

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

#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;   // 原码: 00000101
    signed char b = -5;  // 补码: 11111011

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

    return 0;
}

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/887932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Emergency Stop (ES)

文章目录 1. 介绍2. Feature List3. 紧急停止信号触发方式3.1 Port触发紧急停止信号3.2 SMU事件触发紧急停止信号3.3 软件触发紧急停止信号 4. 应用场景4.1 Port4.2 MSC 1. 介绍 Emergency Stop (ES)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-…

毕设 大数据抖音短视频数据分析与可视化(源码)

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…

以太网交换安全:MAC地址表安全

一、MAC地址表安全 MAC地址表安全是网络安全中的一个重要方面&#xff0c;它涉及到网络设备的MAC地址表的管理和保护。以下是对MAC地址表安全的详细介绍&#xff1a; &#xff08;1&#xff09;基本概念 定义&#xff1a;MAC地址表是网络设备&#xff08;如交换机&#xff0…

阿里云域名注册购买和备案

文章目录 1、阿里云首页搜索 域名注册2、点击 控制台3、域名控制台 1、阿里云首页搜索 域名注册 2、点击 控制台 3、域名控制台

关系数据库和关系模型(1)

昨天补充了DBMS概况的存储管理层面&#xff0c;今天来详细介绍数据库管理系统中常见且应用广泛的关系型数据库&#xff08;简称关系数据库&#xff09;&#xff0c;比如postgreSQL、MySQL、Oracle Database。 关系模型 关系模型是数据库中如何进行存储和组织数据的理论基础。…

掌控物体运动艺术:图扑 Easing 函数实践应用

现如今&#xff0c;前端开发除了构建功能性的网站和应用程序外&#xff0c;还需要创建具有吸引力且尤为流畅交互的用户界面&#xff0c;其中动画技术在其中发挥着至关重要的作用。在数字孪生领域&#xff0c;动画的应用显得尤为重要。数字孪生技术通过精确模拟现实世界中的对象…

虚幻引擎GAS入门学习笔记(一)

虚幻引擎GAS入门(一) Gameplay Ability System&#xff08;GAS&#xff09; 是一个模块化且强大的框架&#xff0c;用于管理虚幻引擎中的游戏玩法逻辑。它的核心组成部分包括 Gameplay Ability&#xff08;定义和执行能力&#xff09;、Gameplay Effect&#xff08;应用和管理…

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…

Electron 主进程与渲染进程、预加载preload.js

在 Electron 中&#xff0c;主要控制两类进程&#xff1a; 主进程 、 渲染进程 。 Electron 应⽤的结构如下图&#xff1a; 如果需要更深入的了解electron进程&#xff0c;可以访问官网 流程模型 文档。 主进程 每个 Electron 应用都有一个单一的主进程&#xff0c;作为应用…

webpack插件 --- webpack-bundle-analyzer【查看包体积】

const UglifyJsPlugin require(uglifyjs-webpack-plugin) // 清除注释 const CompressionWebpackPlugin require(compression-webpack-plugin); // 开启压缩// 是否为生产环境 const isProduction process.env.NODE_ENV production; const { BundleAnalyzerPlugin } requi…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种&#xff0c;性能如下所示&#xff1a; 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

rabbitMQ 简单使用

安装 rabbitMQ 下载地址&#xff1a;rabbitmq-3.12.0 安装 windows rabbitMQ 需要的命令 进入 rabbitMQ 的 sbin 目录后 cmd &#xff08;需要管理员权限&#xff09; rabbitmq-plugins.bat enable rabbitmq_management随后重启 rabbitMQ #关闭服务 net stop rabbitmq #开…

openpnp - juki吸嘴尺寸

文章目录 openpnp - juki吸嘴尺寸概述笔记吸嘴可以对应的最小元件尺寸END openpnp - juki吸嘴尺寸 概述 在网上买的juki吸嘴的商品页面&#xff0c;并没有具体的吸嘴尺寸。 现在贴片时&#xff0c;要根据吸嘴外径大小来决定具体元件要用哪种吸嘴&#xff0c;先自己量一下。 …

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频&#xff0c;10分钟了解uni-app,为什么要选择uni-app&#xff1f;,功能框架图,一套代码&#xff0c;运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作&#xff1a;HBuilder X 软件 HBuilder X 官网下载&#xf…

迁移学习案例-python代码

大白话 迁移学习就是用不太相同但又有一些联系的A和B数据&#xff0c;训练同一个网络。比如&#xff0c;先用A数据训练一下网络&#xff0c;然后再用B数据训练一下网络&#xff0c;那么就说最后的模型是从A迁移到B的。 迁移学习的具体形式是多种多样的&#xff0c;比如先用A训练…

LeetCode讲解篇之300. 最长递增子序列

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题我们可以通过动态规划求解&#xff0c;使用一个数组f&#xff0c;数组f的i号元素表示[0, i]范围内最长递增子序列的长度 状态转移方程&#xff1a;f[i] max(f[j] 1)&#xff0c;其中 0 < j < i 题…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端

2024年过去2/3&#xff0c;大模型领域的一个共识开始愈加清晰&#xff1a; AI技术的真正价值在于其普惠性。没有应用&#xff0c;基础模型将无法发挥其价值。 于是乎&#xff0c;回顾这大半年&#xff0c;从互联网大厂到手机厂商&#xff0c;各路人马都在探索AI时代Killer AP…

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它&#xff0c;结合一个直观的“最低点法则”&#xff0c;来确保找到正确的起点。 问题的核心&#xff1a;油量差值的累积 对于每个加油站&#xff0c;我们有两个数组&…

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…