2060|12

5084

帖子

236

TA的资源

管理员

《Rust实战》书友互动第五集:深入理解数据 [复制链接]

 
从第五集开始,进入《Rust实战》的第二部分:揭开系统编程的神秘面纱,都有哪些东西需要我们去揭晓呢?
 
 
演绎时间:即日起至5月19日
脚本限定:《Rust实战》第五章 深入理解数据
 
角色分配:
提问角色(4位)和解题角色(4位)、总结角色(2位),下方跟帖第一位书友嘉宾是提问角色,第二个是解题角色,解答第一个提问,解答完后,解题角色可以继续提问,也可以不提问,结束一次问答循环。后面参与继续新起问答接龙即可,最后2位是章节总结角色,以文字或者思维导图的形式,对本章进行总结,至此一次互动结束。注意:提问角色发布的问题,要求能在第四章节书中有迹可循,且对解题者理解、学习Rust有切实意义;提问角色所发布的问题不可重复。
 

活动交流群

论坛有开设嵌入式交流群,欢迎感兴趣的小伙伴,微信添加“helloeeworld”为好友,对话:加入嵌入式交流群,入群交流。

扫码,对话:加入嵌入式交流群。

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽

最新回复

其他语言的单双精度的浮点数有效数字,也如此:一个浮点数由三部分组成:符号位 S(表示正负符号)、指数部分 E(阶码,表示次方数)以及尾数部分 M(表示精确度)。   其中,单精度浮点数(float)总共用 32 位来表示浮点数(S:1+E:8+M:23),其中尾数用 23 位存储,加上小数点前有一位隐藏的1(IEEE754 规约数表示法),也就是2的23+1次方,等于16777216,大于10的七次方,但是小于10的八次方。所以他的有效位是7位。换算为十进制时候,会考虑四舍五入的情况,只取六位。   双精度浮点数(double)总共用 64 位来表示浮点数(S:1+E:11+M:52),其中,尾数用 52 位存储,是2的52+1次方,大于10的15次方,但是小于10的16次方。有效位数是 16 位,同样四舍五入时最少 15 位。   详情 回复 发表于 2024-5-20 10:12

回复
举报

168

帖子

10

TA的资源

一粒金砂(高级)


如何把一个4位字节序列转换成32位整数?怎么理解转换是unsafe的?

点评

可以使用 from_be_bytes 或 from_le_bytes 函数。这两个函数分别接受大端和小端字节序的输入。将字节序列转换为整数是一种可能涉及到内存安全的操作。如果字节序列的长度不正确或者字节序列包含  详情 回复 发表于 2024-5-13 19:05

回复

40

帖子

0

TA的资源

一粒金砂(中级)

nemon 发表于 2024-5-13 18:56 如何把一个4位字节序列转换成32位整数?怎么理解转换是unsafe的?

可以使用 from_be_bytes 或 from_le_bytes 函数。这两个函数分别接受大端和小端字节序的输入。将字节序列转换为整数是一种可能涉及到内存安全的操作。如果字节序列的长度不正确或者字节序列包含无效数据,则可能导致未定义的行为,例如访问非法内存地址或者返回错误的结果。因此,在 Rust 中,将字节序列转换为整数被认为是一种 "unsafe" 操作,需要使用 unsafe 关键字来标记。这意味着程序员必须保证输入的数据是有效和正确的,否则可能会导致安全问题。



回复

40

帖子

0

TA的资源

一粒金砂(中级)

为什么两个完全相同的二进制串能表示完全不同的两个数?


点评

这个就涉及到规定了 举个简单例子 signed 8 bit和unsigned 8 bit规定八位二进制,但是第一个位为符号位,所以同样都是 1000-0000,unsigned的就表示很大的数,1*2^7=128 而有符号数1000-0000就是负的-12  详情 回复 发表于 2024-5-13 20:20

回复

4127

帖子

12

TA的资源

版主

ltaodream 发表于 2024-5-13 19:05 为什么两个完全相同的二进制串能表示完全不同的两个数?

这个就涉及到规定了

举个简单例子

signed 8 bit和unsigned 8 bit规定八位二进制,但是第一个位为符号位,所以同样都是

1000-0000,unsigned的就表示很大的数,1*2^7=128

而有符号数1000-0000就是负的-128


回复

434

帖子

4

TA的资源

纯净的硅(高级)

单精度浮点数的精度是多少? (P143 尾数有23位)

点评

个人理解,23位是尾数,其实精度应该是32位,本文所说的就是ieee 754的概念,32个bit表示浮点数,1位符号,8位指数,23位尾数。 而且还可以引申一个概念:能够用32位二进制数表示的数字间隔,即为浮点数数字精度,对  详情 回复 发表于 2024-5-15 08:17

回复

4127

帖子

12

TA的资源

版主

单精度浮点数的精度是多少? (P143 尾数有23位)

个人理解,23位是尾数,其实精度应该是32位,本文所说的就是ieee 754的概念,32个bit表示浮点数,1位符号,8位指数,23位尾数。
而且还可以引申一个概念:能够用32位二进制数表示的数字间隔,即为浮点数数字精度,对于不同阶码的精度还真不一样。

回复

6493

帖子

9

TA的资源

版主

第四章小结:

1、值的所有者(owner)在其生命周期结束时负责清理该值。

2、值的生命周期(lifetime)是一个时间范围,在该时间范围内访问此值是有效的行为。在该值的生命周期结束以后,试图访问此值的代码将不能通过编译。

3、要借用(borrow)一个值,就意味着对该值的访问。

4、即便你发现借用检查器不让程序通过编译,此时你也有多种可用的应对策略。但是,这通常也意味着你可能需要重新思考程序的设计了。

5、使用短存活期的值,而不是长期存活的值。

6、借用可以是只读的,也可以是可读/写的。对可读/写的。对可读/写的借用而言,在任一时间上,就只能存唯一的借用。

7、复制一个值可能是一种务实的方法,可用来打破借用检查器的僵局。想要复制一个值,就需要实clone或者copy。

8、在需要的时候,可以选择借助RC<T>来使用引用计数语义(refernce counting semantics)。

9、Rust提供一个叫作内部可变性(interior mutability)的功能,这使得类型可呈现不可变的外观,而实际上它们的值是可以被修改。

点评

这个小结蛮有意思的啊。。。。。。厘清了一些概念。。。继续加深印象!  详情 回复 发表于 2024-5-15 12:25

回复

556

帖子

1

TA的资源

纯净的硅(中级)

lugl4313820 发表于 2024-5-15 09:51 第四章小结: 1、值的所有者(owner)在其生命周期结束时负责清理该值。 2、值的生命周期(lifetime) ...

这个小结蛮有意思的啊。。。。。。厘清了一些概念。。。继续加深印象!


回复

2803

帖子

4

TA的资源

五彩晶圆(中级)

rust作为一种静态语言,主要的特色和手段就是各种的规矩,这些规矩可能令你“反感”。但是这些规则都针对程序中出现的问题而制定。在第五章开始就说明了不同的类型即使16进制值相同,不同的类型的值也可能不同。所以rust中不可以如C语言一样可以随便的转换变量的数值类型。所以rust中类型不能转换,只能使用trait函数来计算出需要的类型值。

let n:f32 =42.42;
let n_bits:u32 = n.to_bits();

这一规则可以使得程序更加的健壮(strong)

 

点评

大神总是能提纲挈领,切中肯綮!!让人回味回味其设计初衷!  详情 回复 发表于 2024-5-16 13:58

回复

556

帖子

1

TA的资源

纯净的硅(中级)

bigbat 发表于 2024-5-15 13:03 rust作为一种静态语言,主要的特色和手段就是各种的规矩,这些规矩可能令你“反感”。但是这些规 ...

大神总是能提纲挈领,切中肯綮!!让人回味回味其设计初衷!


回复

248

帖子

0

TA的资源

一粒金砂(高级)

请问:

在Rust中,小数可以使用浮点数类型来表示。Rust提供了两种浮点数类型:f32f64,分别用于单精度和双精度浮点数。

  • f32:单精度浮点数,占用32位内存,用于表示较小范围的小数,精度约为6-7位有效数字。
  • f64:双精度浮点数,占用64位内存,用于表示更大范围的小数,精度约为15-16位有效数字。

注:精度有效位数是网上搜的数据,我看f64类型还有说是15-17位的

这个精度是因为语言原因还是因为什么原因,导致这个有效位数是这个?

个人建议:使用这个数据类型需要注意数据精度,如果针对高精度计算的时候,要注意

点评

其他语言的单双精度的浮点数有效数字,也如此:一个浮点数由三部分组成:符号位 S(表示正负符号)、指数部分 E(阶码,表示次方数)以及尾数部分 M(表示精确度)。   其中,单精度浮点数(float)总共用 32  详情 回复 发表于 2024-5-20 10:12

回复

29

帖子

1

TA的资源

一粒金砂(中级)

yangjiaxu 发表于 2024-5-18 15:46 请问: 在Rust中,小数可以使用浮点数类型来表示。Rust提供了两种浮点数类型:f32和f64,分别用于单精度 ...

其他语言的单双精度的浮点数有效数字,也如此:一个浮点数由三部分组成:符号位 S(表示正负符号)、指数部分 E(阶码,表示次方数)以及尾数部分 M(表示精确度)。

 

其中,单精度浮点数(float)总共用 32 位来表示浮点数(S:1+E:8+M:23),其中尾数用 23 位存储,加上小数点前有一位隐藏的1(IEEE754 规约数表示法),也就是2的23+1次方,等于16777216,大于10的七次方,但是小于10的八次方。所以他的有效位是7位。换算为十进制时候,会考虑四舍五入的情况,只取六位。

 

双精度浮点数(double)总共用 64 位来表示浮点数(S:1+E:11+M:52),其中,尾数用 52 位存储,是2的52+1次方,大于10的15次方,但是小于10的16次方。有效位数是 16 位,同样四舍五入时最少 15 位。


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表