c语言中的无符号字节,C语言之有符号数和无符号数

我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时候需要使用有符号数来表示一个整数,因此我们规定,当最高位为1的时,表示为负数,最高位为0时,表示为正数。

1:有符号数和无符号数在数值上的区别。

有符号数的最高位用来表示符号,所以在最大的数值上,有符号数的最大值小于无符号数。以一个字节为例:

有符号数的取值范围为:-128 — 0 — 127

无符号数的取值范围为:0 — 255

2:正数和负数的转换

转换关系为:负数(正数) = 正数(负数)的补码 + 1;

例如:

5  = 0000 0101

-5 = 1111 1011

实际的计算:

最大值 - 当前值 +1;

0xFF -5 +1 = -5(1111 1011)

0xFF -(-5) +1 = 5(0000 0101)

3:正负数在计算机中的存储

在计算机中,并不存在所谓正负,具体看下面的代码

int main(void)

{

int x = -1;

int i = 0;

unsigned int ux = (unsigned)x;

for(i = 0;i<32;i++)

{

ux = ux >> i;

if((ux & 0x01) == 0)

printf("%d = 1\r\n",i);

}

ux = (unsigned) x;

printf("ux = %d \n",ux);

printf("ux = %u \n",ux);

}

运行结果为:

111111111(32个1)

ux = -1

ux = 4294967295

原因是,当我们将 -1 通过强制类型转换赋值给ux时,此时ux变量所对应的地址,所存放的值是-1,也就是0xFFFFFFFF,也就是说,从存储的角度上讲,-1和4294967295在计算机的存储值都是0xFFFFFFFF,关键是你按怎样的方式去解析,

ux = -1;此时我们是按%d也就是有符号×××的方式去解析这个存储空间所对应的值,所以得到的解析结果是-1;

ux = 4294967295,此时我们是按%u也就是无符号×××的方式去解析这个存储空间的值,所以得到的最高位就是数值位,而不是符号位。

解析过程如下,这里假设int类型为一个字节(4个字节也是一样的原理,只是数值更大而已)权255-1

位值位值

11111

21212

41414

81818

16116116

32132132

64164164

12811281-128

所以

-1 = 1+2+4+8+16+32+64+(-128)

255 = 1+2+4+8+16+32+64+128

综上所述,计算机中的存储方式并不区分正负,关键在于程序员用什么方式去解析这块存储空间(地址)的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8种排序算法比较

8种排序算法&#xff0c;各算法名称见下表或见源码。运行程序时&#xff0c;将需要你输入一数值&#xff0c;以确定对多少随机数进行排序。然后将会显示各排序算法的耗时。并且你可选择时否进行正序和反序测试。 由于水平有限&#xff0c;可能存在一些错误&#xff0c;还请各位…

两个问题,关于XP进程优化及SVSP虚拟存储平台

这两个问题让我有点头痛&#xff0c;是Boss这阵子布置给我的&#xff0c;都一段时间了&#xff0c;我还是没找出合适的解决方案来答复Boss.第一个问题是&#xff1a;查查X200或X61中的进程&#xff0c;看哪些是可以不要的&#xff0c;停掉&#xff0c;但又不影响用户使用。&…

数据挖掘—朴素贝叶斯分类算法(Java实现)

算法描述 &#xff08;1&#xff09;扫描训练样本数据集&#xff0c;分别统计训练集中类别 Ci 的个数 Di 和属于类别Ci 的样本中属性Ak取值Xk为 Dik 的实例样本个数&#xff0c;构成统计表&#xff1b; &#xff08;2&#xff09;计算先验概率和条件概率&#xff0c;构成概率表…

net core 获取网站目录

AppContext.BaseDirectory 获取项目的根目录转载于:https://www.cnblogs.com/zxs-onestar/p/7147265.html

泰晤士报下载_《泰晤士报》和《星期日泰晤士报》新闻编辑室中具有指标的冒险活动-第1部分:问题

泰晤士报下载TLDR: Designing metrics that help you make better decisions is hard. In The Times and The Sunday Times newsrooms, we have spent a lot of time trying to tackle three particular problems.TLDR &#xff1a;设计度量标准以帮助您做出更好的决策非常困难…

速度一半永远追不上_您将永远不会知道自己应该怎么做的一半-没关系。

速度一半永远追不上by Ken Gilb肯吉尔伯(Ken Gilb) 您将永远不会知道自己应该怎么做的一半-没关系。 (You will never know half of what you think you should — and that’s ok.) Impostor syndrome is a real thing in software development. After 20 years in the indus…

c语言自学门槛,初学C语言的人最常问的几个问题

初学C语言的人最常问的几个问题C语言是一门通用计算机编程语言&#xff0c;应用广泛。对于新手来说学习C语言并不是那么容易&#xff0c;下面是C语言初学者最常问的几个问题&#xff0c;欢迎阅读!1.多久能学会编程?这是一个没有答案的问题。每个人投入的时间、学习效率和基础都…

背景消除的魔力

图片的功能非常强大&#xff0c;有一图胜千言的效果&#xff0c;所以在文档或演示文稿中使用图片来增加趣味性是一种很棒的想法。但问题是&#xff0c;图片通常会变为文字中间的独立矩形&#xff0c;而不是真正与内容融合在一起。您可以在图片中放置边框或效果&#xff0c;使其…

Puppet 之 模板和模块

1 概述模板文件是在puppet模块下面templates目录中以”.erb”结尾的文件&#xff0c;puppet模板主要用于文件&#xff0c;例如各种服务的配置文件&#xff0c;相同的服务&#xff0c;不同的配置就可以考虑使用模板文件。模块是Puppet自包含的代码和数据集合。绝大多数的清单都…

java异步io_Java中的异步IO与异步请求处理

java异步ioIn this article, I am trying to explain the difference between Async-IO and Async-Request processing in the HTTP request in the Java world.在本文中&#xff0c;我试图解释Java世界中HTTP请求中Async-IO和Async-Request处理之间的区别。 In the pre-Java …

异常检测机器学习_使用机器学习检测异常

异常检测机器学习什么是异常检测&#xff1f; (What is Anomaly Detection?) The anomaly detection problem has been a problem that has been frequently explored in the field of machine learning and has become a classic problem. Anomalies are any unusual sequenc…

数据挖掘—BP神经网络(Java实现)

public class Test {public static void main(String args[]) throws Exception {ArrayList<ArrayList<Double>> alllist new ArrayList<ArrayList<Double>>(); // 存放所有数据ArrayList<String> outlist new ArrayList<String>(); // …

c语言掌握常用函数,c语言一些常用函数.pdf

c语言一些常用函数C 语言程序设计(常用函数说明)C 语言是 1972 年由美国的 Dennis Ritchie 设计发明的,并首次在 UNIX 操作系统的 DEC PDP-11 计算机上使用。它由早期的编程语言 BCPL(Basic Combind ProgrammingLanguage)发展演变而来。在 1970 年,AT&T 贝尔实验室的 Ken T…

高阶函数 - 函数节流

/*** 函数节流 - 限制函数被频繁调用* param {Function} fn [需要执行的函数]* param {[type]} interval [限制多长的时间再重复执行fn]*/var throttle function(fn, interval) {var __self fn,timer,firstTime true;return function() {var args arguments,__me…

[CareerCup] 8.7 Chat Server 聊天服务器

8.7 Explain how you would design a chat server. In particular, provide details about the various backend components, classes, and methods. What would be the hardest problems to solve? 这个简易的聊天服务器功能十分的有限&#xff0c;毕竟只是针对面试题的&…

react hooks使用_如何开始使用React Hooks:受控表格

react hooks使用by Kevin Okeh由Kevin Okeh 如何开始使用React Hooks&#xff1a;受控表格 (How to Get Started With React Hooks: Controlled Forms) React Hooks are a shiny new proposal that will allow you to write 90% cleaner React. According to Dan Abramov, Hoo…

特征工程tf-idf_特征工程-保留和删除的内容

特征工程tf-idfThe next step after exploring the patterns in data is feature engineering. Any operation performed on the features/columns which could help us in making a prediction from the data could be termed as Feature Engineering. This would include the…

c语言定义数组a10 指定各元素,C语言填空题.doc

C语言填空题.doc二、填空题1、C 语言只有 32 个关键字和 9 种控制语句。2、每个源程序有且只有一个 main 函数&#xff0c;系统总是从该函数开始执行 C 语言程序。 3、C 语言程序的注释可以出现在程序中的任何地方&#xff0c;它总是以 * 符号作为开始标记&#xff0c;以 */ 符…

猫狗队列

功能要求&#xff1a; 用户可以调用push方法将cat类或dog类的实例放入队列中;用户可以调用pollAll方法&#xff0c;将队列中所有的实例按照进队列的先后顺序依次弹出;用户可以调用pollDog方法&#xff0c;将队列中dog类的实例按照进队列的先后顺序依次弹出;用户可以调用pollCat…

如何使用HTML5,JavaScript和Bootstrap构建自定义文件上传器

by Prashant Yadav通过Prashant Yadav 如何使用HTML5&#xff0c;JavaScript和Bootstrap构建自定义文件上传器 (How to build a custom file uploader with HTML5, JavaScript, & Bootstrap) In this short article, we’ll learn how to create custom file uploader wit…