取值范围|学习笔记

简介: 快速学习取值范围

开发者学堂课程【你的第一门 C 语言课取值范围】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/444/detail/5457


取值范围


目录:

一、比特位

二、进制

三、符号位

四、补码

五、基本数据数据类型的取值范围


一、比特位

CPU 能读懂的最小单位-比特位,称之为 bit,也叫 b。

内存机构的最小寻址单位-字节,叫 Byte,我们用大写的 B来表示。1 Byte=8 小 bit,一个字节有 8 Byte表示。

图片49.png


二、进制

图片50.png

//在上图的进制表中可以得知:无论是二进制,十进制还是十六进制他们的前两行的值都是

//相等的,都是0和1,十进制就是满十进一。十六进制也是同样的算法,从0到 F,满十//六进一。其中 ABCDEF 分别表示10,11,12,13,14,15。进制间的转化可以使用8421法。

/**

*cpu能读懂的最小单位-比特位,bit,b;理论上讲,内存机构的最小寻址单位-字节,

*byte,B。经过漫长的使用,人们慢慢的将 1 Byte=8 bit 给定了下来了。且每个比特位只能存

*二进制数,也就是0和1。这里有一个问题:一个字节最大可以存放的数用二进制该如何

*来表示?答案是用8个1表示即可,如下图所示:

图片51.png*登入bbs.fishc.com/forum-329-1.html网址,进行扩展阅读。

图片52.png

*学员们可以通过观看扩展阅读,来了解使用补码的好处。

*之所以要进行扩展阅读,是因为学习不能只有一个听的过程,还需

*一个思考的过程,扩展阅读可以帮助学员们更深刻的理解这些知识*点,扩展阅读具有图文并茂的特点。

*练习:定义一个整型变量,使用 pow 函数计算出2的32次方的值

*#include #include

*int main()

*{

*int result = pow(2,32)-1

*printf ( "result = %d \n" , result);

*return 0

*下面需要使用理念lm选项,因为需要使用对应的库

*$ vi test1.c

*$ gcc -lm testl.c &&./a. out

*打印结果如下:

Testl.c:In function  main

Testl.c:6: warning overflow in implicit constant conversionresult=2147483647

*存在的问题是常量溢出,其中警告程序可以正常执行,但是报错就

*不行了。

*经过计算器的验算,可以发现编译器执行的结果并不正确。

图片53.png

*之所以会出现这种情况,是因为没有注意到符号位的使用。符号位:

*存放 signed 类型的存储单元中,左边第一位表示符号位。如果该位

*为0,表示该整数是一个正数;如果该位为1,表示该整数是一个负数。

*正确的做法是在int的左边加上 unsigned,便解决了符号位的问题:

*修改好的代码如下图所示(加上的代码已经使用红色标记):

*#include #include

*int main()

*{

*unsigned int result = pow(2,32)-1

*printf ( "result = %d \n" , result);

*return 0

*新需求:带符号位的最大的可以存储多大的值?

*分析过程如下:

*一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31

*个比特位。因此,一个int类型的数据类型最大可以存放2^31-1

*数。

*事实上,计算机是通过补码的形式来存放整数的值的。

**/

三、符号位

  • 存放 signed 类型的存储单元中,左边第一位表符号位。如果该位为0,表示该整数

是一个正数如果该位为1,表示该整数是一个负数

  • 一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31个比特位。

事实上计算机是用补码的形式来存放整数的值。


四、补码

  • 正数的补码是该数的二进制形式。
  • 负数的补码需要通过以下几步获得:

1.先取得该数的绝对值的二进制形式
2.再将第1步的值按位取反

//按位取反是指将0变成1,将1变成0即可。

/**

*一个使用二进制存储的整数7:

相关文章
|
4月前
百分比-保留2位小数
百分比-保留2位小数
27 0
|
4月前
|
Java 测试技术 API
PTS取值问题之取值失败如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
PTS取值问题之取值失败如何解决
|
2月前
|
存储 Java 测试技术
day6:基本数据类型和取值范围
【7月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
21 0
|
3月前
|
C#
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。
|
3月前
1087 有多少不同的值 (20 分)
1087 有多少不同的值 (20 分)
|
4月前
|
C#
C#中小数保留固定位数
C#中小数保留固定位数
92 1
|
编译器
char类型的取值范围
char类型的取值范围
|
PHP 开发者
参数默认值|学习笔记
快速学习参数默认值
86 0
参数默认值|学习笔记
7-211 求前缀表达式的值 (25 分)
7-211 求前缀表达式的值 (25 分)
207 0
|
存储 算法 编译器
取值范围
一、比特位 二、进制 三、符号位 四、补码 五、基本数据数据类型的取值范围
取值范围