Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45647
  • 博文数量: 5
  • 博客积分: 137
  • 博客等级: 入伍新兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-22 08:49
文章分类
文章存档

2011年(5)

分类: C/C++

2011-10-13 17:17:41

         最近在准备升本考试,在复习C语言时,发现几个以前忽略的问题,现在在回过头来看C语言去研究这些东西感觉挺有意思的,虽然国二考过了,但是在准备国二的过程中并没有像现在这样发现这么多小的知识,也许以前有很多东西还没吃透吧,但现在再去理解很多东西都觉得其实挺简单的,现在就跟大家分享一下:
1.进制转换
  '\xe0'表示的是十六进制,将他用十进制输出时,竟然出现了意想不到的结果,如果没在VC里运行单靠用笔来算的话,那么得到的结果是224,因为14*16=224,但是在VC里运行的结果却是-32,这是为什么呢,原来在计算机内部224以二进制形式存储的是11100000,最高位是1,那么计算机会认为是一个负数,而不是我们算得认为的224,既然是一个负数,那么计算机输出时就要以原码的形式输出,11100000的原码是10100000,他的十进制是32,别忘了他的最高位表示的是符号位,所以输出的就是-32了。这个结果如果仅靠笔算的话还真不好算,因为计算机毕竟不是人,他的算法规则是一定的,不管数怎么变他都按他的预设好的算法规则来。
2.自增自减
 ++、——问题一直是个问题,它牵扯到到底是先用还是先增,说白了,如果++、——在后面那么就先用,在后面就先增再用,但是有这种情况就是a=i+++i+++i++这种情况,那么就不像前面说的那么简单了,首先所有的++号都先不看,只算三个I值相加的结果,最后再将I值自增三次得到I值。如果是a=++j+++j+++j呢,那么就要考虑到+号的一个性质就是做结合性,首先将前两个j自增两次相加然后再和后面的自增三次后的j相加,才能得到结果。
   这是这几天看了题,做了题,改了题之后得到的以前不太明白的一点小心得!
阅读(9504) | 评论(25) | 转发(0) |
0

上一篇:sql小练习

下一篇:没有了

给主人留下些什么吧!~~

davelv2011-10-14 23:10:09

五岳之巅: 看了你写的帖子,其实写的很好,而且非常深入。但问题是有些过于深入了,不同的编译器对这个问题的解释不一定一样,比如turboC和gcc似乎和VC就太一样(N年前的事.....
老湿,当您真正理解了ISO/IEC9899的序列点部分内容再回复我也不迟。

而且你的回复也承认了,不同的编译器有不同的行为。难道你不觉得作为C语言的概念来讲,这种依编译器的定的有歧义的问题完全没有必要吧。

pmerofc2011-10-14 22:50:54

五岳之巅: a=i+++i+++i++
这种写法实际编程时,当然不提倡。
但这种写法本身并不是错误的!
i  +   +   +  i,具体怎么算得看C语言计算符号的优先级和结合性,++比+优先级.....
http://blog.chinaunix.net/space.php?uid=22996974&do=blog&id=163548

【Between the previous and next sequence point an object shall have its stored value modif

pmerofc2011-10-14 22:48:25

五岳之巅: 谭浩强书里写的存在些问题,看了你举得实例。我想增加一个,谭的C里最没写明白的一个地方就是二维指针!
那些所谓的行指针和列指针!
我怀疑谭对这个地方不是不.....
老谭确实根本不懂指针
“行指针”是老谭发明的很扯蛋的术语

KennyDark2011-10-14 22:10:37

五岳之巅: a=i+++i+++i++
这种写法实际编程时,当然不提倡。
但这种写法本身并不是错误的!
i  +   +   +  i,具体怎么算得看C语言计算符号的优先级和结合性,++比+优先级.....
老师, "可以做"和"这样做是正确的"是两码事

五岳之巅2011-10-14 22:02:19

谭浩强书里写的存在些问题,看了你举得实例。我想增加一个,谭的C里最没写明