博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
49th--Expanding-the Bit-Representation-of-a-Number
阅读量:7228 次
发布时间:2019-06-29

本文共 1068 字,大约阅读时间需要 3 分钟。

hot3.png

##关于C中的类型转换

对于C中的类型转换一直停留在《C和指针》中的那张类型提升表中,其中给出了类型的提升顺序,也就是说如果一个表达式中同时出现了int和short,short类型的变量会自动提升为int。但是对其中的具体缘由,从来没有去详细的想过,之前看书比较粗糙,没有细读一本书,理解了整体的意思就觉得自己真的理解的作者的意图,最近在[coursera]上看《[史记]》的开放课程的时候老师讲到一个看怎样读经书的方法,讲到一篇经典的文章的时候,都会去揣测每一个字的含义,以及为什么要用这个字并且出现在这个位置。然后自己去翻了一下前人写的那些个注疏,发现好多的经典我们都没有真正的理解其中的含义。

言归正传,继续写我的读书笔记,当一个无符号类型的值从较小的数据类型转换为一个较大的数据类型的时候,高位补零就可以了,这里也叫作零扩展(zero extersion)。如果将一个有符号的值从较小类型转换成较大的类型的时候会发生什么的?难道也是一样的吗?非也,这里的概念我也是第一次看到,这里会发生符号扩展(sign extension),也就是说高位补什么是根据他的最高位决定的。

##关于类型转换的一些建议

关于类型转我觉得C++之父的那句话永远是真理,C风格的隐时类型转换正的很邪恶,经常会发生一些和你的直觉不相符的事情。这也就是C程序员永远要考虑的一个问题。下面就是一段很邪恶的代码。

 
3 float sum_elements(float a[], unsigned int length)4 {5    float sum = 0.0;67    int i;8    for(i = 0; i < length-1; i++)9       sum += a[i];1011    return sum;12 }

我使用如下的调用会

 
17 float s[] = {1,2,3,4};18 float result = sum_elements(s, 4);22 result = sum_elements(s, 0);

你猜会发生什么?

qian@qian-vm:~/excise/csap/ch2$ ./a.out <br> result of sum is 6.000000<br> Segmentation fault (core dumped)

-END [coursera]: "coursera" [史记]: "史记"

转载于:https://my.oschina.net/u/139914/blog/353624

你可能感兴趣的文章
Python字符编码详解
查看>>
Android开发 Firebase动态链接打开APP
查看>>
基于 HTML5 Canvas 的 3D 模型贴图问题
查看>>
让技术不要成为“背锅侠”!
查看>>
dubbo源码分析系列——dubbo的SPI机制源码分析
查看>>
表格单元格td设置宽度无效的解决办法
查看>>
防止视频资源被下载
查看>>
都是并发惹的祸
查看>>
eclipse实现JavaWeb项目 增量打包
查看>>
面试题系列一之 程序生命周期
查看>>
设计模式——观察者模式:气象监测应用
查看>>
NSUserDefaults简介及如何使用 NSUserDefaults 存储自定义对象
查看>>
IntelliJ IDEA搭建SpringBoot
查看>>
深入浅出iOS事件机制
查看>>
hadoop理解
查看>>
Oracle——18用户、角色和权限信息的视图总结
查看>>
WordPress 中的 Debug 模式(调试模式)
查看>>
node下使用express框架,ejs模板引擎
查看>>
搜索:文本的匹配算法
查看>>
Fedora 17 LibreOffice 办公套件的安装与汉化
查看>>