当前位置: 首页 > 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…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...