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

【C#学习笔记03】进制转换与反码、补码、原码

1. 进制转换

计算机中的数据通常以二进制形式存储,但在编程和调试过程中,我们经常需要与十进制、八进制和十六进制打交道。因此,掌握进制转换是C语言学习中的重要一环。


1.1 进制的基本概念

  • 二进制(Binary)基数为2,使用数字0和1。
  • 八进制(Octal)基数为8,使用数字0到7。
  • 十进制(Decimal)基数为10,使用数字0到9。
  • 十六进制(Hexadecimal)基数为16,使用数字0到9和字母A到F。

1.2 进制转换方法

1.2.1 二进制转十进制

将二进制数的每一位乘以2的幂次方,然后相加。

将二进制数​​1011​​​转换为十进制:

1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0
= 8 + 0 + 2 + 1
= 11
1.2.2 十进制转二进制

通过不断除以2并记录余数,直到商为0,然后将余数倒序排列。

将十进制数​​11​​​转换为二进制:

11 / 2 = 5 余 1
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1

倒序排列余数:​​1011​​。


1.2.3 二进制转八进制

将二进制数从右到左每三位一组,不足三位补零,然后将每组转换为对应的八进制数。

将二进制数​​101110​​​转换为八进制:

101 110
5   6

结果为​​56​​。


1.2.4 二进制转十六进制

将二进制数从右到左每四位一组,不足四位补零,然后将每组转换为对应的十六进制数。

将二进制数​​101110​​​转换为十六进制:

0010 1110
2    E

结果为​​2E​​。


1.2.5 十进制转十六进制

通过不断除以16并记录余数,直到商为0,然后将余数倒序排列。

将十进制数​​255​​转换为十六进制:

255 / 16 = 15 余 15 (F)
15 / 16 = 0 余 15 (F)

倒序排列余数:​​FF​​。


2. 反码、补码和原码

计算机可以区分整数的正负,但是程序最终都会被转换为二进制指令,二进制可以分正负,在二进制数的前面添加1bit,作为符号位,并且bit=0,用于表示二进制数为正数,bit=1,用于表示二进制数为负数。

可以知道,计算机内部是以二进制的补码方式来存储数据的,所以需要把二进制数的原码转换为补码形式。

可以知道,正数的原码和补码是相同的,所以负数才需要把原码转换为补码,再进行存储!


2.1 原码

原码是二进制数的最基本表示形式,最高位为符号位(0表示正数,1表示负数),其余位表示数值。

  • ​+5​​的原码:​​00000101​
  • ​-5​​的原码:​​10000101​

原码表示法存在以下问题:

  • 0有两种表示形式:​​00000000​​(+0)和​​10000000​​(-0)。
  • 加减法运算复杂,需要额外的硬件支持。

2.2 反码

反码是对原码的改进,正数的反码与原码相同,负数的反码是对其原码的符号位不变,其余位取反。

  • ​+5​​的反码:​​00000101​
  • ​-5​​的反码:​​11111010​

反码表示法仍然存在以下问题:

  • 0有两种表示形式:​​00000000​​(+0)和​​11111111​​(-0)。
  • 加减法运算仍然复杂。

2.3 补码

补码是计算机中表示有符号整数的标准方式。正数的补码与原码相同,负数的补码是其反码加1。

  • ​+5​​的补码:​​00000101​
  • ​-5​​的补码:
  • 原码:​​10000101​
  • 反码:​​11111010​
  • 补码:​​11111011​
  • 0只有一种表示形式:​​00000000​​。
  • 加减法运算统一,可以直接使用加法器实现。

补码的运算
补码的一个重要特性是,一个数的补码的补码等于其原码。因此,补码可以方便地用于表示负数和进行减法运算。

计算​​5 - 3​​:

  • ​5​​的补码:​​00000101​
  • ​-3​​的补码:​​11111101​
  • 相加:​​00000101 + 11111101 = 00000010​​(结果为​​2​​)。

注意设计程序时,定义的变量如果是有符号的,则尽量避免写入超过变量范围的数值!!!!!!

字符型: char  1字节 -- 有符号 -- 数值范围 -128 ~ 127  --  无符号 -- 数值范围 0 ~ 255

短整型:short  2字节 -- 有符号 -- 数值范围 -32768 ~ 32767 无符号 --数值范围 0 ~ 65535


3. C语言中的进制表示与位操作

3.1 进制表示

  • 二进制:C语言不支持直接表示二进制数,但可以通过前缀​​0b​​或​​0B​​表示(某些编译器支持)。
  • 八进制:以​​0​​开头,如​​012​​表示十进制的​​10​​。
  • 十六进制:以​​0x​​或​​0X​​开头,如​​0x1A​​表示十进制的​​26​​。
#include <stdio.h>int main() {int binary = 0b1010;  // 二进制,值为10int octal = 012;      // 八进制,值为10int hexadecimal = 0x1A;  // 十六进制,值为26printf("Binary: %d\n", binary);printf("Octal: %d\n", octal);printf("Hexadecimal: %d\n", hexadecimal);return 0;
}

输出

Binary: 10
Octal: 10
Hexadecimal: 26

3.2 位操作

C语言提供了以下位操作运算符:

  • 按位与(&:对应位都为1时结果为1,否则为0。
  • 按位或(|:对应位有一个为1时结果为1,否则为0。
  • 按位异或(^:对应位不同时结果为1,否则为0。
  • 按位取反(~:将所有位取反。
  • 左移(<<:将二进制数向左移动指定位数,低位补0。
  • 右移(>>:将二进制数向右移动指定位数,高位补符号位(算术右移)或0(逻辑右移)。
#include <stdio.h>int main() {int a = 5;  // 二进制:00000101int b = 3;  // 二进制:00000011printf("a & b: %d\n", a & b);  // 00000001 (1)printf("a | b: %d\n", a | b);  // 00000111 (7)printf("a ^ b: %d\n", a ^ b);  // 00000110 (6)printf("~a: %d\n", ~a);        // 11111010 (-6,补码表示)printf("a << 1: %d\n", a << 1);  // 00001010 (10)printf("a >> 1: %d\n", a >> 1);  // 00000010 (2)return 0;
}

输出

a & b: 1
a | b: 7
a ^ b: 6
~a: -6
a << 1: 10
a >> 1: 2

相关文章:

【C#学习笔记03】进制转换与反码、补码、原码

1. 进制转换 计算机中的数据通常以二进制形式存储&#xff0c;但在编程和调试过程中&#xff0c;我们经常需要与十进制、八进制和十六进制打交道。因此&#xff0c;掌握进制转换是C语言学习中的重要一环。 1.1 进制的基本概念 二进制&#xff08;Binary&#xff09;&#xff…...

DeepSeek Kimi详细生成PPT的步骤

以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤&#xff0c;结合了两者的优势实现高效创作&#xff1a; 第一步&#xff1a;使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中&#xff0c;输入具体指令&#xff0c;要求生成 PPT 大纲或…...

python学智能算法(七)|KNN邻近算法

【1】引言 前述学习进程中&#xff0c;已经了解了一些非常经典的智能算法&#xff0c;相关文章包括且不限于&#xff1a; python学智能算法&#xff08;三&#xff09;|模拟退火算法&#xff1a;深层分析_模拟退火 动画演示-CSDN博客 python学智能算法&#xff08;四&#x…...

Java数据结构第二十二期:Map与Set的高效应用之道(一)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、Map和Set 1.1. 概念 二、搜索树 2.1. 概念 2.2. 查找操作 2.2. 插入操作 2.3. 删除操作 2.4. 性能分析 三、搜索 3.1. 概念及场景 3.2. 模型 四、Map 4.1. Map的说明 3.2. Map的使用 五…...

兴达易控modbusTCP转profinet接防撞雷达测试

modbusTCP转profinet接防撞雷达测试 随着工业自动化程度的不断提高&#xff0c;现场设备之间的通信需求日益增长。ModbusTCP作为一种广泛应用的工业通信协议&#xff0c;因其简单、可靠的特点&#xff0c;被广泛应用于各种自动化设备中。而Profinet作为工业以太网的一种&#…...

flutter实践:断点调试踩坑

问题&#xff1a;使用VSCode开发flutter,最近突然开始打断点不生效&#xff0c;程序可以attach,修改有日志输出&#xff0c;但是断点处怎么都停不了&#xff0c;程序异常断点会停。 分析&#xff1a;开始误以为是flutterSDK出了问题折腾了一天&#xff0c;后来又怀疑是lauch.j…...

STM32——GPIO介绍

GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…...

二、docker 存储

docker四种方式&#xff1a;默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供)&#xff0c;其中volumes、bind mounts两种实现持久化容器数据&#xff1b; 默认&#xff1a;数据保存在运行的容器中&#xff0c;容器删除后&#xff0c;数据也随之删除&am…...

Photo Works在线图片编辑器:一键修复老照片,轻松焕新记忆

★【概况介绍】 今天突然收到我的朋友电脑出故障了,截图给我,我一看就知道这个是缺少必要的组件引起的故障。结合这个问题,我来谈谈自己的解决思路和方法,希望能够帮助到大家。帮助大家是我最开心的事情。以前只是帮朋友解决问题,没有记录下来,刚刚接触到这个平台,刚好可…...

SQLiteStudio:一款免费开源跨平台的SQLite管理工具

目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具&#xff0c;由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中&#xff0c;而 SQLi…...

Markdown 语法入门指南(VSCode 版)

此博客为一份详细的 Markdown 语法入门指南&#xff0c;专门针对在 VSCode 上使用 Markdown 的零基础用户。这份指南将包括 Markdown 的基础语法、在 VSCode 中的安装与使用方式、常见问题及注意事项。 Markdown 是一种轻量级标记语言&#xff0c;使用纯文本符号来标记格式&am…...

PostgreSQL学习笔记:PostgreSQL vs MySQL

PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统&#xff0c;它们有以下一些对比&#xff1a; 一、功能特性 1. 数据类型支持 PostgreSQL&#xff1a;支持丰富的数据类型&#xff0c;包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…...

Vite为什么选用Rollup打包?

Vite 在生产阶段使用 Rollup 打包&#xff0c;但这不是唯一选择。它的设计背后有明确的权衡和考量&#xff0c;同时开发者也可以选择其他替代方案。 一、为什么 Vite 默认使用 Rollup&#xff1f; 1. Rollup 的核心优势 • Tree-shaking&#xff1a;Rollup 的静态分析能力极强&…...

内存检测工具——Qt Creator

前言 检测内存错误的工具&#xff0c;有很多个&#xff0c;我今天粗浅的学了一下可在Qt上使用的工具们&#xff1a; Dr.Memory 工具之前我曾在关注的博主上看到相关的博客&#xff1a;C(Qt)软件调试---内存调试器Dr.Memory&#xff08;21&#xff09;_dr. memory-CSDN博客 今…...

2.4 基于Vitest的单元测试基础设施搭建

文章目录 1. 现代单元测试体系解析测试金字塔演进Vitest核心定位2. 基础设施架构设计整体架构图3. 环境配置全流程3.1 基础环境搭建3.2 配置文件`vitest.config.ts`3.3 测试环境初始化4. 测试用例编写规范4.1 基础测试示例4.2 Vue组件测试4.3 异步逻辑测试5. Mock策略深度优化5…...

如何在 React 中使用 CSS-in-JS?

在 React 中使用 CSS-in-JS CSS-in-JS 是一种将 CSS 样式与 JavaScript 代码结合在一起的技术&#xff0c;特别流行于 React 应用中。它允许开发者在组件内部定义样式&#xff0c;使得样式与组件逻辑紧密结合&#xff0c;从而提高了可维护性和可读性。本文将深入探讨在 React …...

⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)

文章目录 148. Sort List解题思路归并排序的基本思想归并排序的步骤 实现实现步骤C 实现JavaScript 实现 复杂度总结 148. Sort List Given the head of a linked list, return the list after sorting it in ascending order. 解题思路 链表排序问题可以通过多种方法解决&am…...

SegMAN模型详解及代码复现

SegMAN模型概述 模型背景 在深入探讨SegMAN模型之前&#xff0c;我们需要了解其研究背景。在SegMAN出现之前&#xff0c;计算机视觉领域的研究主要集中在以下几个方面&#xff1a; 手工制作方法&#xff0c;如SIFT基于卷积神经网络(CNN)的方法&#xff0c;如STN和PTN对平移、…...

Manus AI:多语言手写识别的技术革命与未来图景

摘要&#xff1a;在全球化浪潮下&#xff0c;跨语言沟通的需求日益迫切&#xff0c;但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术&#xff0c;将潦草笔迹转化为精准数字文本&#xff0c;覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...

保姆级别使用Python实现“机器学习“案例

从安装到运行手把手教学,保证不迷路~ 🌈 零基础友好版教程 📦 第一步:安装必备工具包 别慌!这里有两种安装方式,选你顺手的 方式1:用代码自动安装(推荐新手) 直接在你的Python代码最前面加这几行,运行时会自动安装: # 把这坨代码贴在文件最前面! import sys im…...

K8s 1.27.1 实战系列(九)Volume

一、Volume介绍 Volume 指的是存储卷,包含可被Pod中容器访问的数据目录。容器中的文件在磁盘上是临时存放的,当容器崩溃时文件会丢失,同时无法在多个Pod中共享文件,通过使用存储卷可以解决这两个问题。 1、Volume 的核心作用 ​数据持久化与生命周期管理 Volume 的核心目标…...

Stable Diffusion游戏底模推荐

一、基础通用型底模 SDXLbase &#x1f4da; 官方原版底模&#xff0c;支持1024x1024高清出图&#xff0c;适用于各类游戏场景和角色的基础生成&#xff0c;建议作为微调训练的基准模型。 来源: 相关搜索结果 写实风格搭配推荐 &#x1f3a8; 搭配 9realisticSDXL 或 麻袋real…...

GNU Binutils 全工具指南:从编译到逆向的完整生态

1. GNU Binutils 全工具指南&#xff1a;从编译到逆向的完整生态 1. GNU Binutils 全工具指南&#xff1a;从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as&#xff08;汇编器&#xff09;1.3.1.2. gcc&#xff08;…...

nginx 打造高性能 API 网关(‌Building a High-Performance API Gateway with Nginx)

Nginx 打造高性能 API 网关 引言&#xff1a; 在现代微服务架构中&#xff0c;API 网关扮演着至关重要的角色。它不仅负责统一路由请求&#xff0c;还承担着身份验证、负载均衡、流量控制、日志记录等多重任务。而在众多的 API 网关实现方案中&#xff0c;Nginx 作为一个高性能…...

理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...

DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同&#xff0c;一个是字符&#xff0c;一个是字节 如果复制文件类型是文本类型&#xff0c;字节流字符流都可以 如果复制的文件类型是非文本类型&#xff0c;则只能使用字节流&#xff0c;使…...

Securing a Linux server

Is your Linux server safe from hackers? Can they get hacked? Freak out about getting your server compromised and getting your data leaked? Take a look at some of the tips you can take to secure and protect your Linux server. 1. SSH security SSH is l…...

DBeaver安装教程+连接TDengine数据库

为TDengine安装的DBeaver教程 安装 23.1.1 版本以上的DBeaver 因为官方文档说这个版本之上的DBeaver才支持TDengine内嵌前往DBeaver 官方文档进行版本下载滑到链接最下面点击进入 点击download&#xff0c;进入选择下载版本 等待下载成功即可双击自行安装 打开数据库连接TDen…...

postgreSQL window function高级用法

正常使用&#xff1a;相当于对每个row做一次子查询 SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;order by 区别window frame and partition 没有order by&#xff0c; window function是对整个partition起作用&#xff0c; part…...

【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成

标题&#xff1a;《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》 项目&#xff1a;https://city-super.github.io/procgs/ 来源&#xff1a;香港中文大学&#xff1b;上海人工智能实验室 等 文章目录 摘要一、 程序代码定义 (Procedural Co…...

商业智能BI的未来,如何看待AI+BI这种模式?

昨天在和一位朋友线上聊天的时候&#xff0c;提了一个问题&#xff0c;你是如何看待AI&#xff08;人工智能&#xff09;BI&#xff08;商业智能&#xff09;这种模式和方向的&#xff0c;我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业&#xff0c;…...