C语言进阶(反码和补码)

news2024/11/21 2:30:09

文章目录

  • 前言
  • 一、反码
  • 二、补码
  • 三、符号位
  • 四、在程序中打印反码和补码
  • 总结


前言

本篇文章我们主要来讲解C语言中的反码和补码,这个可能是大家比较容易忽略的点,那么这篇文章就带大家来学习一下什么是反码和补码。

一、反码

反码是通过对整数的二进制表示取反得到的。

如果一个二进制数是正数,那么它的反码与原码相同。

如果一个二进制数是负数,那么它的反码是将原码中的所有位取反(0 变为 1,1 变为 0)得到的。
例如:

原码表示的数值为 5:00000101,其反码与原码相同:00000101。

原码表示的数值为 -5:10000101,其反码是将原码中的所有位取反:11111010。

反码的缺点是存在两个零的表示:一个全零(00000000)和一个全一(11111111)。这会导致在进行某些运算时可能出现问题。

二、补码

补码是在反码的基础上再加上 1,得到的结果即为补码。

补码表示的数值与原码相同。

补码的优点在于它消除了反码的两个零的表示问题,只有一个零的表示,同时也提供了更方便的计算方式。大多数现代计算机系统使用补码来表示有符号整数。

例如:

原码表示的数值为 5:00000101,其补码与原码相同:00000101。
原码表示的数值为 -5:10000101,其补码是将反码加 1:10000110。
补码具有很多有用的性质,例如对于加法运算,使用补码可以直接进行二进制的加法,并且不需要额外的处理。

三、符号位

符号位是在有符号数的二进制表示中用来表示数值的正负的一位。

在二进制数中,最高位是用来表示符号位的。通常约定:0 表示正数,1 表示负数。

符号位的存在可以让我们在使用二进制数进行数值计算时,能够区分出正数和负数,从而正确地执行各种算术和逻辑运算。

例如,对于一个 8 位的有符号数,如果最高位为 0,则表示一个正数,而如果最高位为 1,则表示一个负数。

举例:

在这里插入图片描述
需要注意的是,符号位只用于表示数值的正负,而不参与具体的运算。当进行算术运算时,需要考虑符号位的特殊处理,如补码运算中须注意溢出。

符号位是有符号整数的二进制表示中一个重要的组成部分,它提供了对数值的符号信息,在计算和操作有符号数时具有特殊的意义。

四、在程序中打印反码和补码

#include <stdio.h>

void printBinary(int n, int numBits) {
    for (int i = numBits - 1; i >= 0; i--) {
        int bit = (n >> i) & 1;
        printf("%d", bit);
    }
    printf("\n");
}

int main() {
    int num = -5;

    // 反码
    int negation = ~num;
    printf("Negative of %d (in binary): ", num);
    printBinary(negation, sizeof(num) * 8);

    // 补码
    int complement = ~num + 1;
    printf("Two's complement of %d (in binary): ", num);
    printBinary(complement, sizeof(num) * 8);

    return 0;
}

在这个示例程序中,num 被定义为 -5。然后,我们使用位反转操作符(~)和加法运算来计算反码和补码。

函数 printBinary 被定义用于打印二进制表示形式。它从给定的数值 n 的最高位开始迭代,提取每一位的值,并打印出来。

运行这个程序将输出:

Negative of -5 (in binary): 11111111111111111111111111111010
Two's complement of -5 (in binary): 11111111111111111111111111111011

通过使用上述的技巧,你可以在程序中打印给定数值的反码和补码。根据需要,可以调整程序中的数值,并自定义二进制打印的位数。

总结

本篇文章主要给大家讲解了反码和补码的原理,以及如何在程序中打印出反码和补码,大家看完后好好总结学习。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于FPGA的多通道数据采集单元同步的实现

多通道数据采集设备在当前信息数字化的时代应用广泛&#xff0c;各种被测量的信息 如光线、温度、压力、湿度、位置等&#xff0c;都需要经过多通道信号采集系统的采样和 处理&#xff0c;才能被我们进一步分析利用[37]。在一些对采集速率要求较高的军事、航天、 航空、工业制造…

【JUC进阶】06. 轻量级锁

目录 1、前言 2、轻量级锁 2.1、什么是轻量级锁 2.2、工作原理 2.2.1、回顾Mark Word 2.2.2、工作流程 2.3、解锁 3、适用场景 4、注意事项 5、轻量级锁与偏向锁的对比 6、小结 1、前言 前面一节我们讲到了偏向锁。当偏向锁被撤销&#xff0c;或其他线程竞争的时候…

国内脑机接口最新研究 - 脑控机器人在非结构化场景执行避障任务

&#x1f482; 个人主页: 同学来啦&#x1f91f; 版权: 本文由【同学来啦】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏和订阅专栏哦 文章目录 &#x1f31f; 一、能避障的脑控机器人导航&#x1f31f; 二、机器…

Moveit1 机器人配置包超详细解析

前言 Moveit的robot_moveit_config包里有很多文件&#xff0c;在配置时容易搞不清关系&#xff0c;导致配置过程艰难、漫长。 同时互联网上的文档几乎没有详细介绍这部分配置包的&#xff0c;大神各有各的配法&#xff0c;比较混乱。 因此笔者整理了配置包内各个重要的文件&…

Volvo EDI 项目 MySQL 方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的 EDI 项目进行开源。用户安装好知行之桥 EDI 系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。…

Win10安装SQLite Expert Pers Setup64

在win10系统下安装SQLite Expert&#xff0c;我的电脑是64位系统&#xff0c;所以选择SQLite Expert Pers Setup64 一、软件下载 1、官网地址 SQLite administration | SQLite Expert 点击“DOWNLOAD”&#xff0c;选择红框中的免费版本 2、百度网盘下载 链接&#xff1a;h…

SQL SERVER2008导入导入mdf和ldf文件

把需要添加的文件复制粘贴到这个路径下&#xff1a; 再回到这点击添加&#xff1a;

商品减库在Redis中的运用

一.商品减库中存在问题 1.传统的代码 1.1引入jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.…

chatgpt赋能python:Python转换DAT的方法详解

Python转换DAT的方法详解 在数据处理的应用场景中&#xff0c;我们经常要将DAT文件格式转换为其他数据格式&#xff0c;比如CSV或Excel等。此时&#xff0c;Python的数据处理能力就表现出其强大的优势。在本文中&#xff0c;我们将详细介绍使用Python转换DAT文件格式的方法。 …

chatgpt赋能python:在Python中如何实现超链接本地文件

在Python中如何实现超链接本地文件 介绍 超链接是在网页中实现页面跳转的一种技术&#xff0c;而本地文件指的是计算机本地存储的文件。在Python中&#xff0c;我们可以通过一些库来实现超链接本地文件。 具体来说&#xff0c;需要使用到Python中的web框架以及文件操作库&am…

重温数据结构与算法之KMP算法

文章目录 前言一、原理1.1 暴力法1.2 最长公共前后缀 二、代码实现2.1 next数组2.2 可视化next2.3 KMP 三、总结3.1 优点3.2 缺点 参考 前言 ​ KMP 算法是一种字符串匹配算法&#xff0c;它可以在一个主串中查找一个模式串的出现位置。在实际应用中&#xff0c;字符串匹配是一…

LangChain 任意命令执行(CVE-2023-34541)

漏洞简介 LangChain是一个用于开发由语言模型驱动的应用程序的框架。 在LangChain受影响版本中&#xff0c;由于load_prompt函数加载提示文件时未对加载内容进行安全过滤&#xff0c;攻击者可通过构造包含恶意命令的提示文件&#xff0c;诱导用户加载该文件&#xff0c;即可造…

【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)

目录 一、双向链表二、node(int index) 根据索引找节点三、clear()四、add(int, E&#xff09;五、remove(int index)六、双向链表和单链表七、双向链表和动态数组八、jdk 官方的 LinkedList 的 clear() 方法 一、双向链表 &#x1f381; 单链表的节点中只有一个 next 指针引用…

1754_C语言assert函数功能初探

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 最近学习的过程中遇到了C语言中的assert函数&#xff0c;弄不明白这个函数到底是什么用。简单查了一下总结内容如下&#xff1a; 首先&#xff0c;此函数的声明头文件在assert.h中&#xff0c;使…

数据结构之哈夫曼树和哈夫曼编码

切入正题之前&#xff0c;我们先了解几个概念&#xff1a; 路径&#xff1a;从树的一个结点到另一个结点分支所构成的路线路径长度&#xff1a;路径上的分支数目树的路径长度&#xff1a;从根结点出发到每个结点的路径长度之和带权路径长度&#xff1a;该结点到根结点的路径长…

Spring概念:容器、Ioc、DI

目录 什么是容器&#xff1f; 什么是 IoC&#xff1f; 传统程序的开发 理解 Spring IoC DI 总结 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它…

从C语言到C++_22(继承)多继承与菱形继承+笔试选择题

目录 1. 继承 1.1 继承的概念 1.2 继承的定义格式 1.3 访问限定符和继承方式 1.4 继承中的赋值 1.5 继承中的作用域 2. 子类(派生类)的默认成员函数 2.1 子类的构造函数 2.2 子类的拷贝构造函数 2.3 子类的赋值重载 2.4 子类的析构函数 2.5 小总结 3. 继承与友元…

欧洲运输业的创新能力评估报告(英)(附下载)

5月&#xff0c;联合研究中心(JRC)在交通研究与创新监测与信息系统&#xff08;TRIMIS&#xff09;上发布了一份报告&#xff0c;提供了对欧盟运输部门创新能力的最新评估。TRIMIS通过欧盟层面的宏观指标分析&#xff0c;对运输创新能力进行定期评估。 该报告分析了研究与开发(…

Tuxera NTFS2023Mac电脑免费U盘硬盘读写工具

Mac用户在使用NTFS格式移动硬盘时&#xff0c;会遇到无法写入硬盘的情况。要想解决无法写入的问题&#xff0c;很多人选择使用Mac读写软件。面对市面上“众多”的读写硬盘软件&#xff0c;用户应该怎么选择呢&#xff1f;初次接触移动硬盘的伙伴可能不知道移动硬盘怎么和电脑连…

探析ModaHub魔搭社区中文文本生成图片AI模型的现状、趋势和未来发展方向

目录 一、现状分析 二、趋势分析 三、未来预测 ModaHub魔搭社区是一个专注于AI模型开发和分享的平台&#xff0c;其中文本生成图片AI模型是其中的一个重要领域。本文将通过对ModaHub魔搭社区中文文本生成图片AI模型排行榜的数据分析&#xff0c;来探讨该领域的现状、趋势和未…