unsigned详讲(干货满满)

article/2025/10/15 4:20:59

前言过年偷懒了(●ˇ∀ˇ●),但是年后开学了一定要恢复学习状态,在复习加继续学习的途中,我发现对于unsigned关键字的掌握并不是很熟练,于是翻阅了各个大佬的博客以及书籍,总结了对于unsigned的一些知识点。(如有不对的地方,欢迎各位大佬指正🤭)


什么是unsigned?

从字面上来看,不难理解,unsigned是无符号的意思,事实上,的确没错。它在C语言中和signed相反,signed是有符号的意思。其实C语言中的类型基本上都是有符号类型,只是省去了signed,

比如:(signed)int --> int

(signed char)-->char (这个取决于编译器,绝大多数编译器都是这个,比如我们常用的VS)

在了解什么是无符号之前,我们先了解一下什么是符号位(知道的童鞋可以跳过了)

在计算机处理二进制数据时,专门规定了一位符号位,来确定数据的正负,这个符号位通常是数据的最高位,如8比特位数据,左边第一位就是符号位,剩下七位用来表示数据大小。

看例图:

在知道符号位之后就很容易理解无符号了,无符号嘛就是没有符号位,原来的符号位可以列入计算了。值得一提的是,无符号数都是非负数。


unsigned的深入理解

对于有符号类型的整形打印的时候用%d,对于无符号类型的整形打印时用%u

来看一下下面这几个典型例题,让你捋清它们之间的关系并且对unsigned有进一步的了解

例一:

我们将a初始化为无符号整形,将他以%u的形式打印时,我们知道整数在计算机中存储是以二进制序列补码的形式存储的,正数的补码和原码一样,但是负数的补码是通过原码到反码到补码转换得到的。(这个会放在最后说)

-1的补码是11111111111111111111111111111111(共计32位,因为int类型是4个字节,即32个比特位)

按照等比数列求和公式计算得到2^32-1=4294967295. 这与代码跑出来的结果一致。

但是以%d的形式打印时为什么是-1呢?因为以%d形式打印时,系统会将a认为是有符号整形,自然而然的将第一位视为了符号位,经过反码到原码的反变换得到原码是:10000000000000000000000000000001 即 -1。

我们经过调试发现在仅以%d形式打印完后,a的数值仍是4294967295。这说明在printf函数内部进行打印时以怎么样的类型打印并不改变数据原来的类型。

例二:

对于这个题中涉及到了整型提升,如果不理解整型提升是无法理解这道题的。

所以在解决这道题之前,先简单解释一下什么是整型提升

整型提升:

整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。

这是百度百科里面给的解释,是不是有些难以理解?那么来点通俗易懂的。

对于这道题来讲,就是以%d(4字节)打印的时候,不足四个字节的类型比如short,char等类型就要发生整型提升来补到4个字节,正数补0,负数补1(往左端补)。比如变量a,它的类型是char类型,大小是1个字节,它的补码是11111111,8个比特位,因为要以%d形式打印,所以要发生整型提升,就变成了11111111111111111111111111111111

打印时仍然为-1。

同样变量b的类型是short,大小为两个字节所以发生整型提升后也为11111111111111111111111111111111,结果为-1

变量c变量d都是不足4字节的无符号整形,(无符号整形视为非负数)发生整型提升时前面补0,最终序列为

c:00000000000000000000000011111111 ---->2^8-1=255

d00000000000000001111111111111111 ----->2^16-1=65535

变量e本身就是4个字节,无需发生整型提升。因为是无符号整型,所以视为非负数,原码反码补码都一样,2进制补码为11111111111111111111111111111111

以%d形式(有符号整形)打印时第一位视为符号位,则视为负数,通过转换得到原码

10000000000000000000000000000001--->-1,最终结果为-1

由此我们得到结论:

对于负数:

//1.不发生整型提升的情况下,有符号数和无符号数以%u打印结果一样。(因为以无符号整型打印,都吧把符号位纳入计算)

//2.发生整型提升的情况下,有符号数前面补1,无符号数补0

例三:

通过之前的学习我们知道,sizeof是用来计算大小的单目操作符,那么a的类型是int,sizeof(a)是4,那显然-1<4啊,理应输出<,但是系统却输出了>,这是为什么呢?

通过查询MSDN我们发现sizeof返回值是size_t类型,也就是unsigned int类型。

那么在a和其做比较时,a会被转换为无符号类型作比较。a被转换为无符号类型后大小为2^32-1,显然大于4,所以输出 >

By the way:此处的a仍然为int类型,只是作比较时视为无符号类型哟,和之前的printf有异曲同工之处。

结论:在将一个有符号整形和无符号整形作比较时,会将有符号整形视为无符号整形来作比较,但不改变有符号整形变量的性质。


附:计算机中二进制数据的原码反码补码。

整形数据在计算机中存储时都是以补码形式存储的,因为:

  1. 补码使得符号位能与有效值部分一起参加运算,从而简化运算规则。

  1. 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

  1. 保证了0的唯一性,保证了数的表示的准确性。

对于正数来讲:

原码反码补码都相同

对于负数来说:

反码=原码符号位不变,其他位按位取反

补码=反码+1

举个例子:-10(以8bit位数据为例)

原码:10001010

反码:11110101

补码:11110110


结语:

对于整数其实不管怎么存,它的二进制序列是不变的,只是解释的方式不同,那么打印出来的数值就不同了.

ok辣,以上就是unsigned的详细讲解了。如有错误,欢迎指正qaq;如有不足,欢迎补充!

继续加油啊,还是那句话:路漫漫其修远兮,吾将上下而求索!!!


http://chatgpt.dhexx.cn/article/eBaSgwEF.shtml

相关文章

python情感分析中文_【python机器学习】中文情感分析

3月31日,3月最后的一天接到了腾讯HR终面,看着招聘官网变成已完成还有点小自豪呢python 而后百度搜了搜显示“已完成”是否是稳了,原来不是,好多最后被通知没被录取。。。。web 随缘吧~代码还要继续码,博客还要继续更,论文还要继续写。。。。。正则表达式 数据源app 公众号…

yes or no?基于词典的情感分析法

自更博以来第一次断更&#xff0c;现在先把文本分析的坑补上&#xff0c;这篇文章着重介绍情感分析的两种基本方法之一&#xff1a;基于词典的情感分析&#xff08;下篇讲基于监督的情感分析&#xff09;&#xff0c;建模环境为R。 目录 1 背景与目的1.1 情感分析的应用场景1.…

snownlp情感分析

之前写过一篇博客&#xff0c;豆瓣短评分析&#xff0c;当时是拿分类问题来做的&#xff0c;预测的是用户给电影打的星级&#xff0c;其实也可以用snownlp对短评做情感分析。 情感分析就是用一些方法和技术来识别和提取原素材中的情感色彩&#xff0c;本篇博文主要就是介绍如何…

java 情感分析_Alink中文情感分析示例(Java版本)

Alink是基于Flink的机器学习算法平台,欢迎访问Alink的github获取下载链接及更多信息。alibaba/Alink​github.com 也欢迎加入钉钉群进行交流。 情感分析是对带有情感色彩(褒义贬义/正向负向)的主观性文本进行分析,以确定该文本的观点、喜好、情感倾向。本文将针对顾客对酒店的…

情感分析教程

作者|Zijing Zhu 编译|VK 来源|Towards Datas Science 据估计,世界上80%的数据是非结构化的。因此,从非结构化数据中提取信息是数据分析的重要组成部分。 文本挖掘是从非结构化文本数据中获取有价值的信息的过程,情感分析是文本挖掘的应用之一。它使用自然语言处理和机器学…

python 情感分析实例_基于Python的情感分析案例

**情感分析 **又称为倾向性分析和意见挖掘 它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程 其中情感分析还可以细分为情感极性 倾向 分析 情感程度分析 主客观分析等。 情感极性分析的目的是对文本进行褒义、贬义、中性的判 **情感分析&#xff1a;**又称为倾…

情感分析 综述

情感分析或观点挖掘是对人们对产品、服务、组织、个人、问题、事件、话题及其属性的观点、情感、情绪、评价和态度的计算研究。该领域的开始和快速发展与社交媒体的发展相一致&#xff0c;如评论、论坛、博客、微博、推特和社交网络&#xff0c;因为这是人类历史上第一次拥有如…

windows无法启动print spooler服务 资源不足,无法完成该操作

WIN10系统下print spooler打印服务无法启动&#xff0c;提示错误“错误0x800706b9资源不足&#xff0c;无法完成该操作”&#xff0c;可以快速的解决方法。 最近有Win10用户反馈无法打印机&#xff0c;而在启动print spooler服务&#xff08;打印服务&#xff09;时遇到错误提示…

【vSphere故障案例】案例十二:资源不足,vSphere HA故障切换级别

【vSphere故障案例】案例十二&#xff1a;资源不足&#xff0c;vSphere HA故障切换级别 2013-04-17 12:16:51标签&#xff1a;vSphere ESXi HA故障原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任…

解决32位程序报“内存资源不足,无法处理此命令”问题

1、先点击此链接下载插件包&#xff1a;​​​​​​​​​​​​​​​​​​​​​让32位程序能申请到4GB内存方法-C#文档类资源-CSDN文库 2、将EditBin放到程序的根目录 3、 程序的启动项的生成事件里面添加命令行 cd ..\EditBin\x64 editbin /largeaddressaware …

idea启动项目报错内存资源不足的问题

尝试一下几种方式&#xff1a; 1&#xff0c;改变idea的heap参数大小至1500 2&#xff0c;IDEA启动参数配置 -Xms128m -Xmx3072m -XX:ReservedCodeCacheSize240m -XX:UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB50 -ea -XX:CICompilerCount2 -Dsun.io.useCanonPrefixCac…

Vcenter 资源不足,无法满足XXX中集群 上的vSphere HA故障切换级别

故障现象: 做Vmotion时发现报错:Vcenter 资源不足,无法满足XXX中集群 上的vSphere HA故障切换级别 点开集群摘要发现,预留cpu和内存都是100%. 解决过程如下:

海康威视4200服务器显示资源不足,硬盘录像机提示“资源不足”是什么原因 -

很多人来问重庆监控&#xff0c;画面上会提示资源不足是怎么回事&#xff1f;重庆监控来给大家科普一下&#xff1a;资源不足不是设备的故障&#xff0c;他只是一种现象提示&#xff0c;画面上无图像&#xff0c;并且叠加了“资源不足”文字提示。有些伙伴可能重启了录像机几次…

资源优化问题常见形式

1 常见优化问题形式 1.1 以最大化多用户 的 和 速率的形式 此情况下&#xff0c;无论是该和速率是作为目标函数&#xff0c;还是作为约束&#xff0c;都不是凸函数的形式&#xff0c;原因是涉及到 log(.)log(.) 的形式&#xff0c;是非凸的。常见解决方法&#xff0c;是采用 …

不要再抱怨项目资源不足了,这么办都能解决

无论是企业还是银行&#xff0c;项目管理在组织中的地位越来越重要。但笔者走访了超过200家银行和超过100家大型企业&#xff0c;项目管理存在的问题依然严峻&#xff0c;在这些组织中项目管理的成熟度水平依然有较大的提升空间。 在项目管理的十大知识领域里面&#xff0c;资…

node资源不足导致的pod pending状态

背景 linux centos7.6系统 k8s集群刚刚经历节点资源缩容&#xff1a;从8C 32缩小至4c16G 现象 恢复k8s节点后发现很多pod都处于Pending : 原因 由于资源缩容&#xff0c;每个服务占用的cpu和内存值没有改变&#xff0c;导致机器分配资源时内存或cpu不足导致 这一点可以通过…

配置的资源不足,达不到 XXX 内集群 ABC 中期望的 vSphere HA 故障切换级别

做了HA后报此错误&#xff0c;可以在群集的HA设置中修改准入控制&#xff0c;预留的故障切换为机器数量的百分比&#xff0c;当前两台设置50或再高一些即可。另外虚拟机允许的性能降低比例也不可为100。

项目管理,资源不足怎么办?

企业的项目管理活动经常会遇到很多挑战&#xff0c;资源不足可能是最常见的一个&#xff0c;也是会引起重大后果的因素之一&#xff1b;项目管理过程中的资源一般指的是人力资源&#xff0c;项目的推进执行需要大量的人力投入&#xff0c;一旦投入的资源不足&#xff0c;项目的…

复数特征值求特征向量_如何理解特征值的意义?

毕业多年,曾经有同事问我该如何理解特征值的意义? 当时,实在羞愧,我一学数学的,真不知该如何回答。 极力回想,也只能以“特征值的求法、步骤...bla...bla...”应付了事, 答非所问,简直了得! 这样的答案教科书里写得清清楚楚,网上Google/百度一大堆, 人家问的是意义,…