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

[C语言日寄] 源码、补码、反码介绍

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

  • 前言
  • 一、题目引入
  • 二、功能介绍
    • 1. 源码(Original Code)
    • 2. 反码(One's Complement)
    • 3. 补码(Two's Complement)
  • 三、注意事项
  • 四、题目解答
  • 五、简单的拓展应用
    • 1. 判断一个整数的符号
    • 2. 计算一个整数的绝对值
    • 3. 检测整数溢出
  • 总结


前言

在计算机科学中,数据的存储和表示方式是编程的基础知识之一。源码、补码和反码是计算机中整数的三种表示方式,它们在计算机的底层运算和数据存储中十分重要。今天,我们就通过一个简单的程序来深入探讨源码、补码和反码的概念及其应用。


一、题目引入

在计算机中,整数的存储和表示方式是通过二进制编码实现的。然而,不同的编码方式会导致不同的运算规则和存储效果。例如,以下程序的输出结果是什么?

#include <stdio.h>int main() {int a = -5;printf("The binary representation of -5 is: %d\n", a);return 0;
}

A. 无法直接输出二进制形式
B. 输出 -5 的源码形式
C. 输出 -5 的补码形式
D. 输出 -5 的反码形式

在接下来的文章中,我们会一起把源码、补码和反码的知识与题目结合起来,学习这一知识点。

二、功能介绍

1. 源码(Original Code)

源码是最简单的二进制表示方式。对于一个整数,源码的表示规则如下:

  • 正数:最高位为,其余位表示数值部分.
  • 负数:最高位为1,其余位表示数值部分。

例如,对于一个8位的整数:
+5 的源码是 00000101。
-5 的源码是 10000101。

源码的优点是直观,易于理解。然而,它的缺点是存在两个零(+0 和 -0),这在实际运算中会导致一些问题。

2. 反码(One’s Complement)

反码是对源码的一种改进。对于一个整数,反码的表示规则如下:

  • 正数:反码与源码相同。
  • 负数:最高位为1,其余位为源码的按位取反(0变1,1变0)。

例如,对于一个8位的整数:
+5 的反码是 00000101。
-5 的反码是 11111010。
反码解决了源码中两个零的问题,但仍然存在一些运算上的不便,例如加法运算需要额外的处理。

3. 补码(Two’s Complement)

补码是现代计算机中广泛使用的整数表示方式。对于一个整数,补码的表示规则如下:

  • 正数:补码与源码相同。
  • 负数:补码是反码加1。

例如,对于一个8位的整数:
+5 的补码是 00000101。
-5 的补码是 11111011(反码 11111010 加1)。

补码的优点是解决了反码的加法运算问题,同时只有一个零(0 的补码是 00000000),这使得补码在计算机的加法运算中更加高效。

三、注意事项

  1. 编译器和平台的差异
    不同的编译器和平台可能会对整数的存储方式有不同的实现。虽然大多数现代计算机使用补码来表示整数,但关注这些差异可以帮助我们在跨平台开发中避免潜在的问题。
  2. 溢出问题
    在进行整数运算时,特别是加法和减法,需要注意溢出问题。溢出是指运算结果超出了计算机能够表示的范围。例如,对于一个8位的补码整数,最大值为 127,最小值为 -128。如果运算结果超出了这个范围,就会发生溢出,导致错误的结果。

四、题目解答

回到我们最初的问题,程序的代码如下:

#include <stdio.h>int main() {int a = -5;printf("The binary representation of -5 is: %d\n", a);return 0;
}

我们需要确定程序的输出结果。根据前面的分析,我们知道:
在C语言中,printf 的 %d 格式化输出的是十进制整数,而不是二进制形式。
如果要输出二进制形式,需要使用其他方法,例如自定义函数或使用特定的库函数。
因此,程序的输出结果是:

The binary representation of -5 is: -5
正确答案是:A. 无法直接输出二进制形式。

如何输出二进制形式?
如果要输出一个整数的二进制形式,可以使用以下方法:

#include <stdio.h>void printBinary(int num) {for (int i = sizeof(num) * 8 - 1; i >= 0; i--) {printf("%d", (num >> i) & 1);}printf("\n");
}int main() {int a = -5;printf("The binary representation of -5 is: ");printBinary(a);return 0;
}

这段代码会输出 -5 的二进制补码形式:

The binary representation of -5 is: 11111111111111111111111111111011

五、简单的拓展应用

1. 判断一个整数的符号

利用补码的特性,我们可以快速判断一个整数的符号。对于一个补码表示的整数,最高位为1表示负数,最高位为0表示正数。

#include <stdio.h>int main() {int a = -5;if (a & (1 << (sizeof(a) * 8 - 1))) {printf("%d is negative.\n", a);} else {printf("%d is positive.\n", a);}return 0;
}

2. 计算一个整数的绝对值

利用补码的特性,我们可以通过位运算计算一个整数的绝对值。对于一个负数,其补码的按位取反加1即为其相反数。

#include <stdio.h>int absValue(int num) {int mask = num >> (sizeof(num) * 8 - 1);return (num + mask) ^ mask;
}int main() {int a = -5;printf("The absolute value of %d is %d.\n", a, absValue(a));return 0;
}

3. 检测整数溢出

在进行整数运算时,可以通过补码的特性检测溢出。例如,对于两个整数的加法,如果结果的符号与其中一个操作数的符号不同,且与另一个操作数的符号也不同,则可能发生溢出。

#include <stdio.h>int add(int a, int b, int *overflow) {int result = a + b;*overflow = (a > 0 && b > 0 && result < 0) || (a < 0 && b < 0 && result > 0);return result;
}int main() {int a = 1000000000;int b = 1000000000;int overflow;int result = add(a, b, &overflow);if (overflow) {printf("Overflow occurred.\n");} else {printf("The result is %d.\n", result);}return 0;
}

总结

源码、补码和反码是计算机中整数的三种表示方式,它们在计算机的底层运算和数据存储中扮演着重要角色。理解这些编码方式不仅有助于我们更好地理解计算机的工作原理,还能帮助我们在实际编程中优化代码,避免潜在的错误。希望本文能够帮助你更好地掌握这些知识点。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!

相关文章:

[C语言日寄] 源码、补码、反码介绍

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

安卓逆向之脱壳-认识一下动态加载 双亲委派(一)

安卓逆向和脱壳是安全研究、漏洞挖掘、恶意软件分析等领域的重要环节。脱壳&#xff08;unpacking&#xff09;指的是去除应用程序中加固或保护措施的过程&#xff0c;使得可以访问应用程序的原始代码或者数据。脱壳的重要性&#xff1a; 分析恶意软件&#xff1a;很多恶意软件…...

Nuxt:利用public-ip这个npm包来获取公网IP

目录 一、安装public-ip包1.在Vue组件中使用2.在Nuxt.js插件中使用public-ip 一、安装public-ip包 npm install public-ip1.在Vue组件中使用 你可以在Nuxt.js的任意组件或者插件中使用public-ip来获取公网IP。下面是在一个Vue组件中如何使用它的例子&#xff1a; <template…...

babylon.js-3:了解STL网格模型

网格模型上色 本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。 文章目录 网格模型上色运用场景概要延申正文加载器库的支持认识 OBJ 和 STL 文件GUI 色板选择器网格模型异步加载加载动画网格模型上色官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明OBJ …...

基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...

将DeepSeek接入Word,打造AI办公助手

最近&#xff0c;DeepSeek热度一路高涨&#xff0c;成为AI领域的焦点。通过开放的API&#xff0c;我们可以将DeepSeek接入Word&#xff0c;直接进行AI对话。更进一步&#xff0c;还能利用DeepSeek辅助修改文档&#xff0c;甚至提出一些排版建议。 Word报告工具已经新增“DeepS…...

Coze,Dify,FastGPT,对比

在当今 AI 技术迅速发展的背景下&#xff0c;AI Agent 智能体成为了关键领域&#xff0c;Coze、Dify 和 FastGPT 作为其中的佼佼者&#xff0c;各有千秋。 平台介绍 - FastGPT&#xff1a;由环界云计算公司发起&#xff0c;是基于大语言模型&#xff08;LLM&#xff09;的开源…...

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息&#xff0c;采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外&#xff0c;Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…...

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…...

GL C++显示相机YUV视频数据使用帧缓冲FBO后期处理,实现滤镜功能。

一.前言&#xff1a; GitHub地址&#xff1a;GitHub - wangyongyao1989/WyFFmpeg: 音视频相关基础实现 系列文章&#xff1a; 1. OpenGL Texture C 预览Camera视频&#xff1b; 2. OpenGL Texture C Camera Filter滤镜; 3. OpenGL 自定义SurfaceView Texture C预览Camera视…...

【hot100】刷题记录(7)-除自身数组以外的乘积

题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#x…...

解决.NET程序通过网盘传到Linux和macOS不能运行的问题

问题描述&#xff1a;.net程序用U盘传到虚拟机macOS和Linux可以正常运行&#xff0c;但是网盘传过去就不行。 解决方法&#xff1a; 这是文件权限的问题。当你通过U盘将文件传输到虚拟机的macOS和Linux系统时&#xff0c;文件的权限和所有权可能得到了保留或正确设置。但如果…...

练习(复习)

大家好&#xff0c;今天我们来做几道简单的选择题目来巩固一下最近学习的知识&#xff0c;以便我们接下来更好的学习。 这道题比较简单&#xff0c;我们前面学过&#xff0c;在Java中&#xff0c;一个类只能继承一个父类&#xff0c;但是一个父类可以有多个子类&#xff0c;一个…...

Class2(2020):Shell基础(二)——Shell脚本设计基础

本系列博客为MIT的《Missing in CS Class》的课程笔记。 Class2(2020):Shell基础(二)——Shell脚本设计基础 注&#xff1a;若无特殊说明&#xff0c;本文中带有[]的部分均为可选参数。 脚本文件 脚本语言为解释执行&#xff0c;其运行需有解释器&#xff0c;如Python。Shel…...

HBase-2.5.10 伪分布式环境搭建【Mac】

文章目录 前言一、搭建单节点Zookeeper1. 解压zookeeper2. 配置环境变量3. 修改配置文件4. 启动zk 二、搭建伪分布式Hbase1. 解压hbase2. 配置环境变量3. 修改配置4. 启动HBase 前言 搭建hbase伪分布式环境 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例仅供参…...

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

macos的图标过大,这是因为有自己的设计规范

苹果官方链接&#xff1a;App 图标 | Apple Developer Documentation 这个在官方文档里有说明&#xff0c;并且提供了sketch 和 ps 的模板。 figma还提供了模板&#xff1a; Figma...

2025_1_29 C语言学习中关于指针

1. 指针 指针就是存储的变量的地址&#xff0c;指针变量就是指针的变量。 1.1 空指针 当定义一个指针没有明确指向内容时&#xff0c;就可以将他设置为空指针 int* p NULL;这样对空指针的操作就会使程序崩溃而不会导致出现未定义行为&#xff0c;因为程序崩溃是宏观的&…...

解决ImportError: cannot import name ‘notf‘

解决ImportError: cannot import name ‘notf‘ 报错&#xff1a; 报错代码&#xff1a; from torch.utils.tensorboard import SummaryWriter cannot import name notf from tensorboard.compat 解决方法&#xff1a; pip install numpy1.26.0 测试代码&#xff1a; py…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...