3 数据类型、运算符与表达式-3.3.2 整型变量(原码,反码,补码)

在计算机科学中,补码、原码和反码是用来表示带符号整数的二进制编码方法,特别是在计算机内存中存储和处理整数时。这些编码方式帮助计算机区分正数和负数,并支持算术运算。以下是它们的具体含义:

原码(True Form or Sign-and-Magnitude)

  • 定义:原码是最直接的表示方法,用最高位来表示符号(0表示正数,1表示负数),其余位表示数值的绝对值。例如,+3的原码为0011,而-3的原码为1011。
  • 特点:简单直观,但直接使用原码进行加法运算时,正数与负数的加法会出现问题,因为符号位会直接相加。

反码(Ones’ Complement)

  • 定义:反码是为了解决原码加法问题而引入的,对于正数,反码与原码相同;对于负数,除了符号位保持不变,数值位上的每一位都取反(0变成1,1变成0)。例如,+3的反码依然是0011,而-3的反码则是1100。
  • 特点:使用反码进行加法运算可以正确处理正数加负数的情况,但是0有两种表示(+0和-0),且减法运算依然不直接。

补码(Two’s Complement)

  • 定义:补码是在反码的基础上,对负数的反码再加1得到的。正数的补码与原码、反码相同。例如,+3的补码为0011,而-3的补码是1101(先取反得到1100,再加1)。
  • 特点
    • 唯一性:所有数(包括正数、负数和零)都有唯一的补码表示,消除了+0和-0的问题。
    • 方便计算:使用补码可以直接进行加法和减法运算,无需区分操作,因为减一个数等同于加上它的补码。
    • 溢出处理:补码还能自然处理溢出问题,使得计算机在处理算术运算时可以忽略溢出情况,简化硬件设计。

总结:在现代计算机系统中,补码是最常用的表示方法,因为它简化了硬件设计,并且使得加法、减法运算以及溢出的处理变得统一和高效。原码和反码在教学中主要用于解释补码的概念,以及理解计算机系统的历史发展。

了解您想看关于原码、反码、补码的实际应用案例,下面我将通过一个简单的C语言示例来演示如何在实际编程中使用这些概念来处理有符号整数的运算。这个例子将会展示如何手动计算一个负数的原码、反码和补码,并用补码形式执行加法运算。

实战案例:计算负数的补码并进行加法运算

#include <stdio.h>

// 手动计算负数的补码
unsigned int calculateTwosComplement(int number) {
    if (number >= 0) return number; // 正数的补码等于其原码
    unsigned int absNumber = -(unsigned int)number; // 获取绝对值的无符号表示
    return ~(absNumber) + 1; // 取反后加1得到补码
}

int main() {
    int a = -5; // 示例中的负数
    int b = 3; // 示例中的正数

    // 计算a的补码
    unsigned int a_twos_complement = calculateTwosComplement(a);
    printf("数字 %d 的补码是:%u\n", a, a_twos_complement);

    // 将a的补码转换回原码表示,仅为了展示原码和反码的计算过程
    int a_original = (int)a_twos_complement;
    if (a < 0) a_original = -((int)~a_twos_complement + 1);
    printf("数字 %d 的原码是:%d\n", a, a_original);

    // 注意:在实际计算机内存中,a直接以补码形式存储,不会手动转换回原码

    // 使用补码进行加法运算
    // 注意:直接使用C语言的加法运算符即可,因为编译器内部会处理补码运算
    int sum = a + b;
    printf("-%d 加上 %d 的结果(使用补码计算)是:%d\n", a, b, sum);

    return 0;
}

解释

  • 上述代码首先定义了一个函数calculateTwosComplement,用于计算一个整数的补码。特别地,如果输入是正数或零,函数直接返回原值(因为正数的补码等于其原码);如果是负数,则先取绝对值转换为无符号整数,然后对每位取反,最后加1得到补码。
  • main函数中,我们定义了两个整数变量ab,分别代表一个负数和一个正数。我们通过调用calculateTwosComplement函数计算a的补码,并打印出来。
  • 接着,为了教学目的,我们手动演示了如何从补码恢复到原码的过程,但实际上在计算机中我们不需要做这个转换,因为计算机会直接使用补码进行运算。
  • 最后,我们通过简单的加法运算a + b展示了在C语言中,即使是负数和正数的加法,也能直接进行,这是因为编译器底层处理的是补码形式的数值。

这个例子展示了补码在实际编程中的应用,尤其是在处理有符号整数运算时,补码提供了便利和效率。
在这里插入图片描述

在这里插入图片描述

【例3.2 】整型变量的定义与使用。

main()
{
int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);
}

【例 3.3】整型数据的溢出。

main() 
{ 
	 a=32767
	 b=a+1; 
	 printf("%
 }

【例 3.4】

main() 
{ 
 long x,y; 
 int a,b,c,d; 
 x=5; 
 y=6; 
 a=7; 
 b=8; 
 c=x+a;
 d=y+b; 
 printf("c=x+a=%d,d=y+b=%d\n",c,d); 
 }

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

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

相关文章

【免杀】C2远控-Loader加载器-动态API调用

目录 创建后门程序站在杀毒程序立场上对后门进行分析例&#xff1a;动态调用VirtualProtect函数 作用:绕过杀毒对导入表的检测定性 创建后门程序 VS新建项目 回调函数加载Loader #include <Windows.h>unsigned char shellcode[] "";void CallBack() {void* p…

【LLM】Dify 0.6.10 在Windows系统上本地化部署

【LLM】Dify 0.6.10 在Windows系统上本地化部署 文章目录 【LLM】Dify 0.6.10 在Windows系统上本地化部署一、参考资料二、Dify 概述1、Dify开源项目功能介绍&#xff08;RAG流水线&#xff0c;Agent工具接入&#xff0c;Prompt配置和工作流编排&#xff0c;大模型接入&#xf…

使用Vue CLI在其他磁盘创建项目出现错误及解决

Vue CLI是Vue.js官方推出的脚手架工具&#xff0c;可以帮我们快速的创建Vue项目框架。 我们创建Vue项目时一般默认都是在C盘&#xff0c;但由于某些因素我们需要在其他磁盘上创建Vue项目。 通过“winr”打开终端时默认位置都是C盘&#xff0c;但是Vue CLI不接受绝对路径作为参…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

python3.6ssl证书错误无法pip的问题

出现了这个报错&#xff1a; Could not fetch URL https://pypi.python.org/simple/cryptography/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748) - skipping 一开始以为是fiddler开着的原…

iOS——分类、扩展和关联对象

前情回顾 回顾一下什么是分类、什么是扩展&#xff1a; 分类&#xff08;Category&#xff09;和类扩展&#xff08;Extension&#xff09;是两种常见的代码组织方式&#xff0c;用于扩展类的功能。 分类&#xff08;Category&#xff09; 分类是一种将类的实现分散到多个源…

svn的使用

【图文详解】入职必备——SVN使用教程-CSDN博客 使用SVNBucket作为服务端,来辅助学习. 什么时候会产生冲突呢? 原本A,B,服务器的版本都一致,都是最新版. A修改文件m,向服务器提交 B修改文件m,向服务器提交,这时候出现了冲突 双击冲突的文件,手动修改

vscode 访问容器的方式

方法一&#xff1a;先连服务器&#xff0c;再转入容器 配置客户机A M1. 客户机A通过 vscode 连接服务器B&#xff0c;再连接容器C 配置vscode的ssh配置文件&#xff1a;~.ssh\config&#xff08;当需要多个不同的连接时&#xff0c;使用 IdentityFile 指定公钥位置&#xff09;…

【解决问题】QApplication: No such file or directory,C++ 使用Qt或项目未正确加载Cmake报错

运行环境&#xff1a; Clion编译&#xff0c;构建C工程项目报错QApplication: No such file or directory 问题描述 QApplication: No such file or directory 引用的#include <QApplication>飘红 解决方案 1、Qt没有安装正确&#xff0c;请使用对应版本的Qt。或编译…

【Java】Java流中的API

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Vue笔记(二)

Vue&#xff08;一&#xff09;&#xff1a;Vue笔记&#xff08;一&#xff09;-CSDN博客 综合案例&#xff1a;水果购物车 项目功能&#xff1a; 视频链接&#xff1a;034-水果购物车-基本渲染_哔哩哔哩_bilibili 目录结构&#xff1a; index.css .app-container {padding-…

【python】flask 框架

python flask 框架 flask是一个轻量级的python后端框架 (Django, tornado, flask) 官网&#xff1a;欢迎来到 Flask 的世界 — Flask中文文档(3.0.x) 安装&#xff1a;pip install Flask -i https://pypi.douban.com 常识&#xff1a; http,默认端口号为80; https,默认端口号…

【Linux】进程间通信之命名管道

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

linux centos如何安装python3版本但不能影响默认python2版本

在CentOS上安装Python3而不影响系统默认的Python2,具有如何安装呢? 1. 更新系统包 首先,确保系统包是最新的: sudo yum update -y2. 安装EPEL存储库 EPEL(Extra Packages for Enterprise Linux)存储库包含许多额外的软件包,包括Python3: sudo yum install epel-rel…

IDEA:配置Golang的开发环境

1、下载&安装 进入GO的官网下载对应的GO 我们可以下载安装版&#xff0c;不过本人习惯下载解压版&#xff0c;这个因个人而异 2、配置环境变量 GOBIN : %GOROOT%\bin GOPATH : D:\MyGo 工作区间 GOROOT : D:\Program Files\Go GOJDK地址PATH: %GOBIN% ; %GOROOT%\bin ; …

LeetCode 算法:矩阵置零c++

原题链接&#x1f517;&#xff1a;矩阵置零 难度&#xff1a;中等⭐️⭐️ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1…

stm32MP135裸机编程:修改基于SD卡的FSBL-A用户程序引导程序(boot)

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf stm32mp135官方开发板原理图&#xff08;mb1635-bdp-v1-0.zip&#xff09; STM32Cube_FW_MP13_V1.0.0 STM32CubeIDE v1.15 1 为什么需要修改FSBL-A用户程序引导程序 FSBL-A用户程序引导程序的作用在《…

PR如何让音频淡入淡出

PR如何让音频淡入淡出 方法一&#xff1a;效果控件关键帧方法二&#xff1a;音频轨道关键帧 以淡入为例&#xff0c;介绍如何设置淡入的两种方法&#xff0c;推荐使用第二种。淡出效果类似。 方法一&#xff1a;效果控件关键帧 选中音频&#xff0c;点击效果控件 在淡入结束的…

Gradio.NET 的简单入门使用

1、最近在网络上由发现了一个好完的东西。 2、Gradio.NET通过简单的C# Web API几行代码就可以实现一网页界面。 3、Python中也有一个Gradio&#xff0c;功能好像都差不多哦&#xff0c;不废话了&#xff0c;我们来开始实操。 4、在Visual Studio 2022 中创建一个 ASP.NET Cro…

Kimichat使用案例012:用Kimichat拆解雷军在小米汽车SU7发布会上的演讲技巧

文章目录 一、介绍二、输入内容三、输出内容四、继续追问五、继续回答六、讲解对比七、对比回答相似之处:不同之处:八、职场人士如何借鉴九、借鉴内容一、介绍 小米SU7发布会可以说是非常成功。雷军的演讲技巧是发布会成功的重要因素之一,很值得借鉴学习。 可以借助Kimichat…