【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)ÿ…...
线性搜索算法
何时使用线性搜索算法? 当处理一个小数据集时。当搜索存储在连续内存中的数据集时。 线性搜索算法在什么情况下优于其他搜索算法? 当列表或数组未排序时,或者当输入的大小相对较小时,首选线性搜索算法。它易于实现,并…...
基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装
目录 前言1. RAGFlow 简介1.1 什么是 RAGFlow?1.2 RAGFlow 的核心特点 2. RAGFlow 的安装与配置2.1 硬件与软件要求2.2 下载 RAGFlow 源码2.3 源码编译 Docker 镜像2.4 设置完整版(包含 embedding 模型)2.5 运行 RAGFlow 3. RAGFlow 的应用场…...
蓝桥杯—走迷宫(BFS算法)
题目描述 给定一个NM 的网格迷宫 G。G 的每个格子要么是道路,要么是障碍物(道路用 11表示,障碍物用 0 表示)。 已知迷宫的入口位置为 (x1,y1),出口位置为 (x2,y2)。问从入口走到出口,最少要走多少…...
基于云函数的自习室预约微信小程序+LW示例参考
全阶段全种类学习资源,内涵少儿、小学、初中、高中、大学、专升本、考研、四六级、建造师、法考、网赚技巧、毕业设计等,持续更新~ 文章目录 [TOC](文章目录) 1.项目介绍2.项目部署3.项目部分截图4.获取方式 1.项目介绍 技术栈工具:云数据库…...
Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能
Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能 一、简单介绍 二、LoadingToast 三、简单案例实现 四、关键代码 一、简单…...
GStreamer —— 2.17、Windows下Qt加载GStreamer库后运行 - “播放教程 5:色彩平衡“(附:完整源码)
运行效果 介绍 亮度、对比度、色相和饱和度是常见的视频调整, 在 GStreamer 中统称为 Color Balance 设置。 本教程展示了: • 如何找出可用的色彩平衡通道 • 如何更改它们 允许访问颜色平衡设置。如果 元素支持这个接口,只需将其转发给应用…...
在wsl2中安装ubuntu
Linux 是操作系统内核,Ubuntu 是基于Linux的发行版。 虚拟机 是运行操作系统的虚拟环境,可以在物理机上运行多个操作系统,包括Linux和Ubuntu。 1:启用 WSL 功能 以管理员身份打开 PowerShell。(winR,输入powershell&…...
SPFA算法——负权图且没有负环
SPFA算法其实是对Bellman-ford算法的优化,Bellman-ford算法更新最短路是采用的是遍历每一条边,找到最短的边进行更新d[v]min(d[v],d[u]w(u,v)),由 d[v]min(d[v],d[u]w(u,v))可知只有当 d[ u ]变小时才有可能更新,所以用一个队列存…...
5G基本概念
作者:私语茶馆 1. 5G应用场景概述 1.1.5G应用场景 ITU域2015年定义了三大应用场景:eMBB(增强型移动宽带)、uRLLC(低时延高可靠通信)、mMTC(海量物联网通信); emBB:Enhanced Mobile Broadband ,移动互联网应用,是4G MBB(移动宽带)的升级,主要侧重于网络速率、带…...
conda 安装软件报错 Found conflicts! Looking for incompatible packages.
问题描述: 利用 conda 安装某包 conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc时发现报错: Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retrying with…...
PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
在QGraphicsItem中,pos()和scenePos()是两个重要的方法,用于描述图形项的位置,但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义:pos()返回的是QGraphicsItem在…...
【每日八股】计算机网络篇(四):HTTP
目录 HTTP 与 HTTPS 的区别?HTTPS 加密与认证的过程?ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗?HTTPS 状态码的含义?HTTP 缓存有哪些实现方式?HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...
基于python下载ERA5小时尺度和月尺度的数据
前言:由于ERA5网站的更新,原始的代码都无法使用,这里将会提供下载小时尺度和月尺度的代码。 一、前期的工作 需要重新在ERA5网站上注册新的账号(ERA5网站)。然后在User guide里,选择API,将代码…...
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现软件开机自启
文章目录 前言 一、准备工作1.1 环境搭建1.2 创建 Tauri 项目1.3 添加依赖 二、实现开机自启的基本原理2.1 开机自启的基本概念2.2 Tauri 应用的生命周期 三、Windows 平台实现3.1 Windows 注册表机制3.2 实现步骤3.3 注意事项 四、Linux 平台实现4.1 Linux systemd 服务4.2 实…...
C++20 模块:告别头文件,迎接现代化的模块系统
文章目录 引言一、C20模块简介1.1 传统头文件的局限性1.2 模块的出现 二、模块的基本概念2.1 模块声明2.2 模块接口单元2.3 模块实现单元 三、模块的优势3.1 编译时间大幅减少3.2 更好的依赖管理3.3 命名空间隔离 四、如何使用C20模块4.1 编译器支持4.2 示例项目4.3 编译和运行…...
【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析
【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析 向Kafka Broker服务节点中发送主题消息数据的应用程序被称为生产者,生产者与消费者均属于Kafka客户端,几乎所有主流语言都支持调用客户端API。官方提供了基于Java实现的kafka-clients,用于…...
java-单列模式-final-枚举
内存存储区域 引用变量和普通变量引用变量放在栈中,基本数据类型的内容是在堆内存中。 对象放在堆内存中,其引用变量放在栈中,指向堆内存存放对象的地址。 静态变量放在静态区中,静态变量在程序的执行始中中分配一次,…...
deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...
LabVIEW非线性拟合实现正弦波参数提取
LabVIEW的Nonlinear Curve Fit.vi基于Levenberg-Marquardt算法,能够实现非线性最小二乘拟合,包括正弦波三参数(幅值、频率、相位)的精确求解。该工具适用于非均匀采样、低信噪比信号等复杂场景,但需注意初始参数设置与…...
CAMEL 学习笔记一
课程讲义 https://github.com/camel-ai/owl CAMEL (Communicative Agents for “Mind” Exploration of Large Language Models)是一个开源的多智能体框架,专注于构建基于大语言模型的智能体交互系统。该框架通过角色扮演和结构化对话机制,实现智能体之…...
java每日精进 3.11 【多租户】
1.多租户概念 1. 多租户是什么? 多租户,简单来说是指一个业务系统,可以为多个组织服务,并且组织之间的数据是隔离的。 例如说,在服务上部署了一个MyTanant系统,可以支持多个不同的公司使用。这里的一个公…...
2.2 企业级ESLint/Prettier规则定制
文章目录 1. 为什么需要企业级代码规范2. 工具选型对比3. 完整配置流程3.1 项目初始化3.2 ESLint深度配置3.3 Prettier精细配置3.4 解决规则冲突4. 高级定制方案4.1 自定义ESLint规则4.2 扩展Prettier插件5. 团队协作策略5.1 配置共享方案5.2 版本控制策略6. CI/CD集成7. 常见问…...
Ubuntu 源码安装 Qt5
1.开发背景 Ubuntu 下安装指定版本的 Qt,最新的Qt官方已经不支持 Qt5.15.2 版本以下版本,所以有必要用旧的源码编译 Qt 库。 2.开发需求 源码安装 Qt5.12.2 3.开发环境 开发环境:Ubuntu18.04 目标版本:Qt5.12.2 4.实现步骤 4…...
【Linux】权限相关知识点
思考 我们平时使用Linux创建文件或目录时的默认权限是多少? [rootlocalhost test]: mkdir dir [rootlocalhost test]: touch file [rootlocalhost test]: ll total 0 drwxr-xr-x 2 root root 6 Mar 8 15:23 dir #755 -rw-r--r-- 1 root root 0 Mar 8 15:23 f…...
SSH 安全致命漏洞:渗透路径与防御策略
作为远程管理的核心协议,SSH 的 22 端口在全球服务器中广泛部署,却也成为攻击者的首要目标。本文将以技术视角还原黑客通过 22 端口渗透的完整路径,并结合最新漏洞(如 CVE-2024-6387)提供防御建议,帮助企业…...
使用ngnix进行负载均衡部署deepseek蒸馏版
使用ngnix进行负载均衡部署deepseek蒸馏版 一、安装及配置nginx1.1.安装依赖:1.2. 导入Nginx签名密钥1.3. 添加Nginx软件源1.4. 更新软件包列表并安装Nginx1.5. 启动Nginx服务1.6. 验证安装1.7.修改配置文件,将自己的内容加进去1.8、重新加载Nginx配置:二、模型启动2.1、分布…...
面试之《TypeScript泛型》
在 TypeScript(TS)里,泛型是一项极为重要的特性,它能让你编写可复用、类型安全且灵活的代码。以下从多个方面为你详细介绍 TS 中的泛型: 基本概念 泛型允许你创建可重用的组件,这些组件能够处理多种数据类…...
PyTorch系列教程:Tensor.view() 方法详解
这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…...
IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)
目录 一、背景二、操作步骤2.1 开启新 UI 样式2.2 设置 Tool Window 工具栏 一、背景 好久没有更新 IDEA 了,更新之后发现 IDEA 的工具栏消失了。一番操作之后,终于把 IDEA 的工具栏的设置调整好了,在此进行记录调整步骤,供大家学…...
基于Prometheus+Grafana的Deepseek性能监控实战
文章目录 1. 为什么需要专门的大模型监控?2. 技术栈组成2.1 vLLM(推理引擎层)2.2 Prometheus(监控采集层)2.3 Grafana(数据可视化平台)3. 监控系统架构4. 实施步骤4.1 启动DeepSeek-R1模型4.2 部署 Prometheus4.2.1 拉取镜像4.2.2 编写配置文件4.2.3 启动容器4.3 部署 G…...
windows下docker的安装
前言 早期的docker只能在Linux下使用,随着技术的发展,目前docker在Windows下也能方便的使用了。 一、docker的下载 从docker官网下载“docker desktop” 下载这个: 二、Windows下docker的安装 安装完毕后,重启的系统进行登录&am…...
Nginx正向代理HTTPS配置指南(仅供参考)
要使用Nginx作为正向代理访问HTTPS网站,需通过CONNECT方法建立隧道。以下是操作详细步骤: 1. 安装Nginx及依赖模块 需要模块:ngx_http_proxy_connect_module(支持CONNECT方法)。 安装方式:需重新编译Nginx…...
01_LVGL 对象与盒子模型详解
1. LVGL 的对象 在LVGL中,⽤⼾界⾯的 基本组成部分 是对象(控件),也称为 Widgets。例如,⼀个 按钮、标签、图像、列表、图表 或者 ⽂本区域。所有的对象都使⽤ lv_obj_t 指针作为句柄进⾏引⽤。之后可以使⽤该指针…...
【redis】string应用场景:共享会话和手机验证码
文章目录 共享会话实现思路 手机验证码实现思路伪代码实现生成验证码验证验证码 共享会话 实现思路 如果每个应用服务器,维护自己的会话数据,此时彼此之间胡共享,用户请求访问到不同的服务器上,就可能会出现一些不能正确处理的情…...
【保姆级教程】使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD
内容预览 ≧∀≦ゞ Windows终端美化指南:美化你的命令行界面!引言一、准备工作包管理器:scoop为什么选择使用 Scoop 安装?安装 scoop 字体终端离线安装步骤配置 Windows Terminal 二、配置美化 PowerShell安装 oh-my-posh激活 oh-…...
刷leetcode hot100--动态规划3.11
第一题:最长递增子序列[10:53] 1.dp数组及下标含义:dp[n]:nums[0...n]的最长严格递增子序列长度【无法进行后续比较】 dp[n]以nums[n]结尾的最长严格递增子序列对应的长度 2.初始化:注意!!这里应该初始化为1&#x…...
网络安全基础与应用习题 网络安全基础答案
1.列出并简要给出SSH的定义。 正确答案: 答:6.10传输层协议:提供服务器身份验证、数据保密性和数据完整性,并具有前向保密性(即,如果在一个会话期间密钥被破坏,则知识不会影响早期会话的安全性&…...
利用python生成excel中模板范围对应的shape文件
利用python生成excel中模板范围对应的shape文件 # -*- coding: utf-8 -*- import os.pathimport pandas as pd from shapely.geometry import Polygon from shapely.wkt import dumps import argparse# 创建解析器 parser argparse.ArgumentParser(description"这是一个…...
方案精读:IBM方法论-IT规划方法论
该文档聚焦 IT 规划方法论,适合企业高层管理者、IT 部门负责人、业务部门主管以及参与企业信息化建设的相关人员阅读。 (本解读资料已包含在绑定资源内) 主要内容围绕 IT 规划展开:首先明确 IT 规划需基于企业核心战略࿰…...
JAVA面试_进阶部分_正确使用 Volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效…...
ArcGIS Pro中字段的新建方法与应用
一、引言 在地理信息系统(GIS)的数据管理和分析过程中,字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计,字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提…...
c++ 中的引用
引用与指针经常混淆,总结一下 文章目录 1. 引用与指针的区别2. 引用传递数组3. 通过引用传递容器和类4. 多线程传递容器时用 std:: ref 替代引用传递 1. 引用与指针的区别 引用(Reference):引用是变量的别名,本质上不…...
使用jest测试用例之入门篇
Jest使用 Jest 是由 Facebook 开发的一个 js 测试框架,jest 主要侧重于被用于做单元测试和集成测试 安装 npm i jest -D运行 **package.json**里面配置命令 // scripts添加测试脚本 {"test": "jest" /* 运行后便会使用 jest 执行所有的 .t…...
k8s面试题总结(十四)
什么是Helm? Helm是一个k8s的包管理工具,它简化了应用程序在k8s集群中的部署,管理和维护。类似于rpm包和yum之间的关系。 K8s传统方式:类似于rpm安装包的方式,逐步进行安装,遇到依赖还得解决依赖问题 he…...
后端面试高频笔试题(非常规LeetCode类型)
目录 1. 常见的五种单例模式的实现⽅式 2. 约瑟夫环 (递归) 3. 交替打印奇偶数 (Semaphore、synchronized搭配wait、notify) 4. 交替打印 ABC (Semaphore) 5. 三个线程交替打印 1 到 99 (Semap…...
el-table 通过 slot=“header“ 自定义表头,遇到数据不更新的问题。
从表中可以看到我要的数据为空,但是在控制台输出数据又不为空,由此判断是自定义表头的内容未在数据变化时触发重新渲染 在 Element UI 官方示例中,若通过旧式插槽语法 slot"header" 实现自定义表头,并在表头内集成 el-s…...
ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
1.开发板配置 本人开发板使用ESP32S3-wroom1-n16r8最小系统板 由于基于vscode与PlatformIO框架开发,无espidf框架,因此无法直接烧录程序,配置开发板参数如下: 在platformio.ini文件中,配置使用esp32-s3-devkitc-1开发…...
ios 小组件和数据共享
创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理ÿ…...
鸿蒙开发可以从事的岗位
学完鸿蒙开发方向后,可以从事的岗位主要集中在以下几个领域: 鸿蒙系统开发工程师 负责鸿蒙操作系统的开发、优化、维护和更新工作,包括系统层、框架层、应用层的开发等。 嵌入式软件开发工程师 鸿蒙系统广泛应用于物联网设备、智能硬件等领域…...