【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. 进制转换 计算机中的数据通常以二进制形式存储,但在编程和调试过程中,我们经常需要与十进制、八进制和十六进制打交道。因此,掌握进制转换是C语言学习中的重要一环。 1.1 进制的基本概念 二进制(Binary)ÿ…...
DeepSeek Kimi详细生成PPT的步骤
以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤,结合了两者的优势实现高效创作: 第一步:使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中,输入具体指令,要求生成 PPT 大纲或…...
python学智能算法(七)|KNN邻近算法
【1】引言 前述学习进程中,已经了解了一些非常经典的智能算法,相关文章包括且不限于: python学智能算法(三)|模拟退火算法:深层分析_模拟退火 动画演示-CSDN博客 python学智能算法(四&#x…...
Java数据结构第二十二期:Map与Set的高效应用之道(一)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、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接防撞雷达测试 随着工业自动化程度的不断提高,现场设备之间的通信需求日益增长。ModbusTCP作为一种广泛应用的工业通信协议,因其简单、可靠的特点,被广泛应用于各种自动化设备中。而Profinet作为工业以太网的一种&#…...
flutter实践:断点调试踩坑
问题:使用VSCode开发flutter,最近突然开始打断点不生效,程序可以attach,修改有日志输出,但是断点处怎么都停不了,程序异常断点会停。 分析:开始误以为是flutterSDK出了问题折腾了一天,后来又怀疑是lauch.j…...
STM32——GPIO介绍
GPIO(General-Purpose IO ports,通用输入/输出接口)模块是STM32的外设接口的核心部分,用于感知外界信号(输入模式)和控制外部设备(输出模式),支持多种工作模式和配置选项。 1、GPIO 基本结构 STM32F407 的每个 GPIO 引脚均可独立配置,主要特性包括: 9 组 GPIO 端口…...
二、docker 存储
docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据; 默认:数据保存在运行的容器中,容器删除后,数据也随之删除&am…...
Photo Works在线图片编辑器:一键修复老照片,轻松焕新记忆
★【概况介绍】 今天突然收到我的朋友电脑出故障了,截图给我,我一看就知道这个是缺少必要的组件引起的故障。结合这个问题,我来谈谈自己的解决思路和方法,希望能够帮助到大家。帮助大家是我最开心的事情。以前只是帮朋友解决问题,没有记录下来,刚刚接触到这个平台,刚好可…...
SQLiteStudio:一款免费开源跨平台的SQLite管理工具
目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具,由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中,而 SQLi…...
Markdown 语法入门指南(VSCode 版)
此博客为一份详细的 Markdown 语法入门指南,专门针对在 VSCode 上使用 Markdown 的零基础用户。这份指南将包括 Markdown 的基础语法、在 VSCode 中的安装与使用方式、常见问题及注意事项。 Markdown 是一种轻量级标记语言,使用纯文本符号来标记格式&am…...
PostgreSQL学习笔记:PostgreSQL vs MySQL
PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统,它们有以下一些对比: 一、功能特性 1. 数据类型支持 PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…...
Vite为什么选用Rollup打包?
Vite 在生产阶段使用 Rollup 打包,但这不是唯一选择。它的设计背后有明确的权衡和考量,同时开发者也可以选择其他替代方案。 一、为什么 Vite 默认使用 Rollup? 1. Rollup 的核心优势 • Tree-shaking:Rollup 的静态分析能力极强&…...
内存检测工具——Qt Creator
前言 检测内存错误的工具,有很多个,我今天粗浅的学了一下可在Qt上使用的工具们: Dr.Memory 工具之前我曾在关注的博主上看到相关的博客:C(Qt)软件调试---内存调试器Dr.Memory(21)_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 代码结合在一起的技术,特别流行于 React 应用中。它允许开发者在组件内部定义样式,使得样式与组件逻辑紧密结合,从而提高了可维护性和可读性。本文将深入探讨在 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模型之前,我们需要了解其研究背景。在SegMAN出现之前,计算机视觉领域的研究主要集中在以下几个方面: 手工制作方法,如SIFT基于卷积神经网络(CNN)的方法,如STN和PTN对平移、…...
Manus AI:多语言手写识别的技术革命与未来图景
摘要:在全球化浪潮下,跨语言沟通的需求日益迫切,但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术,将潦草笔迹转化为精准数字文本,覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...
保姆级别使用Python实现“机器学习“案例
从安装到运行手把手教学,保证不迷路~ 🌈 零基础友好版教程 📦 第一步:安装必备工具包 别慌!这里有两种安装方式,选你顺手的 方式1:用代码自动安装(推荐新手) 直接在你的Python代码最前面加这几行,运行时会自动安装: # 把这坨代码贴在文件最前面! import sys im…...
K8s 1.27.1 实战系列(九)Volume
一、Volume介绍 Volume 指的是存储卷,包含可被Pod中容器访问的数据目录。容器中的文件在磁盘上是临时存放的,当容器崩溃时文件会丢失,同时无法在多个Pod中共享文件,通过使用存储卷可以解决这两个问题。 1、Volume 的核心作用 数据持久化与生命周期管理 Volume 的核心目标…...
Stable Diffusion游戏底模推荐
一、基础通用型底模 SDXLbase 📚 官方原版底模,支持1024x1024高清出图,适用于各类游戏场景和角色的基础生成,建议作为微调训练的基准模型。 来源: 相关搜索结果 写实风格搭配推荐 🎨 搭配 9realisticSDXL 或 麻袋real…...
GNU Binutils 全工具指南:从编译到逆向的完整生态
1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as(汇编器)1.3.1.2. gcc(…...
nginx 打造高性能 API 网关(Building a High-Performance API Gateway with Nginx)
Nginx 打造高性能 API 网关 引言: 在现代微服务架构中,API 网关扮演着至关重要的角色。它不仅负责统一路由请求,还承担着身份验证、负载均衡、流量控制、日志记录等多重任务。而在众多的 API 网关实现方案中,Nginx 作为一个高性能…...
理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...
DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同,一个是字符,一个是字节 如果复制文件类型是文本类型,字节流字符流都可以 如果复制的文件类型是非文本类型,则只能使用字节流,使…...
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,进入选择下载版本 等待下载成功即可双击自行安装 打开数据库连接TDen…...
postgreSQL window function高级用法
正常使用:相当于对每个row做一次子查询 SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;order by 区别window frame and partition 没有order by, window function是对整个partition起作用, part…...
【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成
标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》 项目:https://city-super.github.io/procgs/ 来源:香港中文大学;上海人工智能实验室 等 文章目录 摘要一、 程序代码定义 (Procedural Co…...
商业智能BI的未来,如何看待AI+BI这种模式?
昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...
