无符号数与有符号数转换

C++:标准转换 C++:标准转换简介整型提升整型转换有符号转换为无符号无符号转换为有符号浮点转换整型和浮点型之间的转换算术转换类型转换的条件指针转换指向类的指针指向函数的指针指向 void 的指针固定和可变指针null 指针转换指针表达式转换引用转换指向成员的指针指向基类成员的指针指向成员转换的 null 指针 简介 C++ 语言定义其基础类型之间的转换。 它还定义指针、引用和指向成员的指针派生类型的转换。 这些转换称为 标准转换。 本节讨论下列标准转换: 整型提升 整型转换 浮点转换 浮点转换和整型转换 算术转换 指针转 阅读详情



2.概念
 在计算机中,可以区分正负类型的数,成为“有符号数”(signed);无正负类型的数(只有整数类型),成为“无符号数”(unsigned)。简明的说,无符号说就是其所有的位数都用来表示数值的大小,有符号数除最高位来表示数值的正负外(0表示正数;1表示负数),其余各位用来表示数值的大小。举个例子说明一下:十机制数 正数255  二进制表达形式:1111 1111

十机制数 负数-1     二进制表达形式:1111 1111 

可见-1的二进制的最高位为红色的1,可是为什么其表达形式为1111 1111而不是1000 0001呢?这就关于任何数在计算机内是以补码形式存储问题。下面会介绍的,在此先不详细说明了。

3.存储范围

从前面的介绍可以知道,由于有符号数的最高位被拿来用作符号位,所以它所能够表达的最大数值要小于无符号数所能够表达的最大数值。还是举个例子来说明一下吧:

无符号数:1111 1111 十进制值:255

有符号数:0111 1111 十进制值:127

这是有人可能会提出这样的疑问:有符号数所能够表达的数值范围会不会小于无符号数所能够表达的数值范围呢?

呵呵,答案是否定的!虽然有符号数在表达最大值上的能力减弱了,但是它能够表达负数。负数的个数可以弥补其不足。来让我们比较一下:

一个字节的无符号数的表达数值范围是:[0,255]

一个字节的有符号数的表达数值范围是:[-128,0),[0,127]

可见它们都能够表示256个数。

4.各种码(原码/反码/补码)

有些人也许会这样认为"-1"(双字节)在计算机中的表达形式为1000 0000 0000 0001,可是实际上不是的。计算机是以其补码的形式进行表达的,即“-1”(双字节)的表达形式是1111 1111 1111 1111。

说一下各种码的概念吧。

原码:一个整数,按照绝对值的大小转换成二进制数,最高位为符号位。

反码:将原码除最高位(符号位)外,其余各位按位取反,所得到的二进制码。正数的反码为原码。

补码:反码最低位加1即为补码。

关于负数的补码求法说明一下,先得到其反码,之后将反码加1即可。有些大神根据其原码,闭眼即得,这种能力需要修炼一下啊。

这时有些人可能会说,为什么要引入补码的形式呢?直接按照原码存储不就省事很多吗?嘿嘿,要记住,有些事情并不是你想省事就能省事的。好了来欣赏一下补码的优势吧。

计算机的带符号数用补码表示的优点:

1负数的补码与对应正数的补码之间的转换可以用同一种方法-求补运算完成,可以简化硬件。 2 可将减法变为加法,这样减法就可以用加法器进行计算了。 3 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

心算求补(大神求补算法):

从最低位开始至找到的第一个1均不变,符号位不变,这之间的各位“求反”(0变1;1变0)。

原码:1010 1001  补码:1101 0111.

5.有符号数与无符号数的相互转换

无符号整数和有符号整数之间进行强制类型转换时,位模式不改变。

有符号数转换为无符号数时,负数转换为大的正数,相当于在原值上加上2的n次方,而正数保持不变。

无符号数转换为有符号数时,对于小的数将保持原值,对于大的数将转换为负数,相当于原值减去2的n次方。

当表达式中存在有符号数和无符号数类型时,所有的操作都自动转换为无符号类型。可见无符号数的运算优先级高于有符号数。

unsigned int a = 20;
signed int b = -130;

 运算一下结果是 b>a 。

6.转换大餐

有符号数的转换

原类型目标类型转换方法
 char

short

符号位扩展
charlong符号位扩展
charunsigned char最高符号位失去位意义,变为数据位
charunsigned short符号位扩展到short;然后从short转到unsigned short
charunsigned long符号位扩展到long;然后从long转换到unsigned long
charfloat符号位扩展到long;然后从long转到float
chardouble符号位扩展到long;然后从long转换到double
charlong double符号位扩展到long;然后从long转换到long double
shortchar保留低位字节
shortlong符号位扩展
shortunsigned char保留低位字节
shortunsigned short

最高为失去意义,变为数据位

shortunsigned long符号位扩展到long;然后从long转到unsigned long
shortfloat符号位扩展到long;然后从long转到float
shortdouble符号位扩展到long;然后从long转到double
shortlong double符号位扩展到long;然后从long转换到long double
longchar保留低位字节
longshort保留低位字节
longunsigned char保留低位字节
longunsigned short保留低位字节
longunsigned long最高为失去意义,变为数据位
longfloat使用单精度浮点数表示,可能失去精度
longdouble使用单精度浮点数表示,可能失去精度
longlong double使用单精度浮点数表示,可能失去精度

无符号数的转换

原类型目标类型转换方法
unsigned charchar最高为作符号位
unsigned charshort0扩展
unsigned charlong0扩展
unsigned charunsigned short0扩展
unsigned charunsigned long0扩展
unsigned charfloat转换到long;然后从long转换到float
unsigned chardouble转换到long;然后从long转换到double
unsigned charlong double转换到long;然后从long转换到long double
unsigned shortchar保留低位字节
unsigned shortshort最高为作符号位
unsigned shortlong0扩展
unsigned shortunsigned char保留低位字节
unsigned shortunsigned long0扩展
unsigned shortfloat转换到long;然后从long转换到float
unsigned shortdouble转换到long;然后从long转换到double
unsigned longlong double转换到long;然后从long转换到long double
unsigned longchar保留低位字节
unsigned longshort保留低位字节
unsigned longlong最高位作符号位
unsigned longunsigned char保留低位字节
unsigned longunsigned short保留低位字节
unsigned longfloat转换到long;然后从long转换到float
unsigned longdouble直接转换到double
unsigned longlong double转换到long;然后从long转换到long double



IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现 研究了很多方法,没有办法实现,只在营业费用增加一个冲抵项解决,也咨询了外部顾问说要建立自建表。限于需要马上修正后面只能用了最最low的办法处理了一下。公司遇到的一个问题,目前报表有些项目是按照功能范围取值的,发现取多了。IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现。最后结果是正确的,但是总觉得有更好的办法,不知道有没有高人可以指点一下?建立一个调整项的目录,在每个节点做了调整。除了研发费用做了冲抵在以下每个节点都做了冲抵。为财务报表定义表格结构。 阅读详情

相关推荐

scrapy - 美团民宿 实战练习

目录结构 items.py import scrapy # 民俗名称,地区,价格,房间类型及数量,床的数量,可住几人 class MeituanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() place = scrapy.Field() price = scrapy.F...

小刘的博客 2664

计算机中的有符号数和无符号数

1.概念  在计算机中,可以区分正负类型的数,成为“有符号数”(signed);无正负类型的数(只有整数类型),成为“无符号数”(unsigned)。简明的说,无符号说就是其所有的位数都用来表示数值的大小,有符号数除最高位来表示数值的正负外(0表示正数;1表示负数),其余各位用来表示数值的大小。举个例子说明一下:十机制数 正数255  二进制表达形式:1111 1111 十机制数 负数

XIANG__jiangsu的专栏 4924

倒立摆入门详解+pid调参

倒立摆制作全过程 最近在练习pid的控制算法,就选用了2013年的电子设计国赛题目:倒立摆 。 首先给你们看看我的成果 注意哦:倒立摆不是靠上面黄色的传感器保持平衡的,而是通过下面的电机左右扭动使得摆杆不掉下来,难度可不小了。 材料准备 1.机械部分 如图所示选好电机和角位移传感器进行组装就好了,这个部分是我直接网上购买的,如果要自己装也是可以的,不过会比较麻烦,结构差不多的。 2.主控部分 这个部分的话完全是我自己设计的,作用和网上买的一样,因为网上买的话太贵了,有需要的话可以联系我,有pcb文件

small_po_kid的博客 2万+

C++中无符号数与有符号数的转换

C++中的无符号数与有符号数的转换 1.无符号数转为有符号数 unsigned short int a = 50000; signed short int b = 0; b = a; cout << "无符号数转为有符号数: " << b << endl; 解释:因为short int 在32位机器上占2个字节,即16位。故无...

CurryCoder的个人博客 1万+

AI训练加速30%!用numactl玩转多显卡绑核的隐藏技巧

本文深入探讨了如何利用Linux系统的numactl工具,通过精确的NUMA绑核策略优化多GPU AI训练性能。文章详细解析了NUMA架构对性能的影响,提供了从拓扑探查、命令实战到多卡脚本化部署的完整指南,并分享了性能验证与常见陷阱,帮助开发者实现高达30%的训练加速。

web99的专栏 448

特斯拉 Model 3解析(八)全面拆解特斯拉自动驾驶大脑:AP控制器硬核技术解析

算力极限:双FSD = 144 TOPS,专为AI推理优化。存储架构:LPDDR4 + NAND + NOR,保证高速/可靠启动。通信架构:以太网传视频,CAN传控制,TSN保障实时性。感知输入:多路摄像头 + 高速SerDes,满足全景感知。电源设计:功率模块+被动元件海洋,稳定性优先。功能安全:双芯片冗余 + GPS + 紧急呼叫,容错率极高。🎯 在我看来,特斯拉AP控制器就是一台“车载超算”,它在电源设计、存储架构和功能安全上远超一般新势力方案。

weixin_43199439的博客 1438

无符号数与有符号数之间的强制转换

ANSI C规定在无符号整数和有符号整数之间进行强制类型转换时,位模式不应该改变。类型转换并未改变对象的位模式,改变的是位模式的解释方式。      有符号数转换为无符号数时,负数转换为大的正数(可以理解为原值加上2的n次方),而正数保持不变。   因为有符号数第一个比特位代表符号位,而无符号数首位是计入绝对值的,有符号数的最小值(负最小)转换后刚好就是有符号数最大值max的(max+1)*2-

Kelvin_Yan的专栏 7653

prplOS amx-fxgi调试-订阅subscribe

本文分析了prplOS中amx-fxgi订阅功能(subscribe)的实现与调试过程。通过梳理订阅流程发现,默认订阅失败主要由于acl规则限制导致。文章详细介绍了订阅的两个关键步骤:建立GET长连接和POST设置订阅路径,并通过修改代码绕过acl验证成功实现订阅功能。最终验证了在同一连接下订阅多个路径及实时接收状态更新的可行性,有效降低了设备查询负载。该方案为prplOS的实时数据监控提供了优化思路。

四儿家的小祖宗的博客 329

深入理解计算机系统——无符号数和有符号数相互转换

背景知识: 一般来说,有符号数值使用补码表示,无符号的数值使用原码来表示。 直接将二进制补码转化为十进制 补码的首位是符号位,如果为1则为负,所以-1 * 2^w为表示的数值。 例如:-3二进制补码1101 直接将补码转化为十进制: -1 *2^3 + 1 * 2^2 + 0 * 2 ^ 1 +1 * 2^0 有符号数值转化为无符号数值 首先有符号数值使用补码表示,例如,-3的补码1101。将有符号数值改变为无符号数值,不会将二进制数更改,我们改变对二进制位的解释。比如-3,表示时使用补码是1101,我们

Xiang_lhh的博客 3690

【GameFramework框架内置模块】2、数据节点(Data Node)

这一篇讲数据节点DataNode,基本开发程序都会有类似数据节点作用的东西,数据节点的作用其实就是保存游戏运行时的一些缓存数据,比如用户登录信息、用户名、任务节点等等。数据一般会有增删改查这四种操作,在运行时的数据一般是使用单例或者静态属性,将数据存储在内存中而数据节点也是将数据存储在内存中,但是不用序列化数据,比使用单例或者静态属性要容易维护的多,特别时它的树形结构可以让我们很好的组织我们的数据结构,方便做增删改查操作。数据节点DataNode模块的数据的存储方式是以树形结构存储。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3177

Matlab并行运算

今天搞了一下matlab的并行计算,效果好的出乎我的意料。 本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用。等于可以拆成n个线程并行,要是有550核的话,估计1ms就算完了。。。 先转下网上找到的资料。 一、Matlab并行计算原理梗概 Matl

wenyusuran的专栏 1万+

【考研计组】有符号数与无符号数之间的转换

楼主有话要说: 在复习《计算机组成原理》时,遇到了有符号数与无符号数之间转换的问题,为了应对这类问题,楼主仔细查阅资料再结合做题总结出一些心得,内容如下: 注意: 1、字长都用的是 16 位(方便些) 2、建议先去大致了解下 C++ 里基本数据类型的字节长度和示数范围;如: char 1 byte int 4 byte short [int] 2 byte float 4 byte long [int] 4 byte ..

qq_34438969的博客 1万+

跟踪雷达点迹处理

1,点迹定义: 假设研究对象为位置x和速度v,预测值是根据这一时刻的x值、v值来预测下一时刻的x、v;测量值是根据传感器也就是雷达得到的,因为各种误差的存在,这两个值都不准确,所以把他们加权融合,得到一个新的量—状态值。 点迹就是所谓的测量值,由雷达对同一个目标探测到的一系列点(假设目标静止,但由于误差的存在,会扫描出不止一个点),航迹对应状态值,是点迹和预测轨迹的加权融合。 2,雷达信号和点迹处理关系: 3,点迹航迹处理流程 4,仿真 clear all; RealData=G

wangjie36的博客 1万+

有符号数与无符号数之间的转换

本文讲解有符号数和无符号数之间的转换。 针对同一数据类型有符号数和无符号数之间的转换,例如 int 和 unsigned int 之间和 char 和 unsigned char 之间 。这种情况下,二者之间的数据类型长度一致,不会发生转换后数据溢出而导致截断的问题。例如把一个int 类型转为unsigned char 类型,转换后数据存不下,导致被截断。 1. 首先针对这种情况,有符号类型和无符号类型中存储的数据是一致的,不一致的是数据的解释方式,有符号类型中最高位被解释为符号位,无符号数中最高...

爱吃鱼的猫 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

无符号数和有符号数的转换

有符号转无符号,则有符号数加上(2^最大位数)无符号转有符号,则有符号数减去(2^最大位数)

m0_61973119的博客 3389

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

有符号数的转换和 无符号数的转换(转)

有符号数的转换和 无符号数的转换(转)(2010-05-26 11:58:57)标签:c/c类型转换杂谈分类:C/C++<br />2-4有符号数的转换 从到方法charshort符号位扩展charlong符号位扩展charunsigned char最高位失去符号位意义,变为数据位charunsigned short符号位扩展到short;然后从short转到 unsigned shortcharunsigned long符号位扩展到long; 然后从long 转到unsigned longcharfloa

lambyuyu的专栏 3188

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

无符号数和有符号数之间的转换

在fpga里进行无符号数和有符号数的转换。在fpga里,无符号数就是非负数,有符号数就是可正可负。

qq_57548898的博客 666

C语言中的有符号数和无符号数之间转换

C语言中的有符号数和无符号数之间转换 我们都知道C语言中有有符号数和无符号数两种整数表示方法,并且支持相互转换。 那么具体相互转换有什么规则,我们今天来了解一下: 在C语言中当声明一个像12345或0x1A2B这样的常量时,这个值默认是有符号的,要声明一个无符号常量必须在常量后面加上’u’或‘U’,例如12345u或0x1A2BU。C语言允许有符号和无符号数之间的转换,具体的转换规则是,底层的位表示保持不变。 例如: 强制类型转换导致转换发生: int tx, ty; unsigned ux, uy; t

weixin_46105796的博客 5566

c/c++ 有符号数与无符号数的转换

在开发中,经常会碰到有符号数与无符号数之间的转换,有时是隐性,有时是显性。如果不清楚其中规则,则可能带来非常难以排查的bug。

Code is poetry 1万+

有符号数与无符号数的强制类型转换问题

在C语言中有符号数转化为无符号会出现一些问题,先看以下的程序例子: int main() { char ch[12] = {0xF0, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00}; unsigned int result = (ch[7] << 8) + ch[6]; // ch[7]为0x0

johnson4303的专栏 2万+

有符号数和无符号数的转换

参考:http://www.cnblogs.com/tgycoder/p/4218696.html int main(void){   /* 一个字节 无符号范围为[0, 255],有符号范围为[ -128,0],[0,127] */   signed char b = -120;   signed short c = -60000;   unsigned char a;  ...

dianerbeng2911的博客 611

有符号数的转换和 无符号数的转换

2-4有符号数的转换   从 到 方法 char short 符号位扩展 char long 符号位扩展 char unsigned char 最高位失去符号位意义,变为数据位 char unsigned short 符号位扩展到short;然

robertzhouxh的专栏 985

Java中有符号数与无符号数的转换

java中有符号数与无符号数的转换

weixin_45593273的博客 1820

深入理解有符号数与无符号数的强制转换

C语言中8位有符号类型的整数值范围为什么是从-128~127,深入理解有符号数和无符号数的强制转换。

H0893_888的博客 2246

关于有符号数和无符号数的转换

转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题,被它们之间的转换原理和位移原理搞得头大了。真的很后悔本科的时候没有认真学习《计算机组成原理》/《计算机操作系统》等计算机基础课程。以下是我根据相关知识回顾和整理的材料,如有和某某的文章有雷同之处,...

kakaworld的博客 2498
上一篇: C++实现一个类只有一个实例对象
下一篇: operator new / operator delete等的重载
tkp2014
博客等级 码龄12年 137粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值