Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45575
  • 博文数量: 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相加,才能得到结果。
   这是这几天看了题,做了题,改了题之后得到的以前不太明白的一点小心得!
阅读(9492) | 评论(25) | 转发(0) |
0

上一篇:sql小练习

下一篇:没有了

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

pmerofc2011-10-14 21:38:18

朱宝艳: 因为我也处于学习阶段,请指教。。。.....
在C语言中,字符类型有三种
char,signed char, unsigned char
其中char可能和signed char的行为一致,也可能和unsigned char的行为一致
这取决于实现(编译器)
如果一个编译器的char类型和signed char一致
那么'\xe0'确实存在你说的符号扩展,即-32
但如果一个编译器的char类型和unsigned char一致
那么'\xe0'是244

davelv2011-10-14 21:23:32

五岳之巅: 朱宝艳就是我的一个女学生,本来是做了专升本的习题解决问题,然后给自己做的笔记而已,而且写的很快很乱,只为自己看懂就是了。没想到被首页了,她肯定没有想挑.....
老湿,其实我并不是不尊重教师,我也是教师家庭出身,但是既然从事教育工作这么多年,也教了这么多学生,不知道您有没有对这些所谓显而易见/广为传播的“真理”进行过验证。
“检验真理的标准是什么?”
C语言不是VC也不是GCC这种编译器或者IDE,它是一门语言。
你所问我的问题我已经回答过很多遍(回答不同的人),答案在这个帖子里。
http://bbs.chinaunix.net/viewthread.php?tid=1795135&extra=&p

十年梦生2011-10-14 21:14:52

[root@bogon ~]# cat test.c
#include<stdio.h>

main(){
printf("%d\n",'\xe0');
}
[root@bogon ~]# gcc test.c
[root@bogon ~]# ./a.out
-32
[root@bogon ~]#



gcc运行的结果  
不多说  实践是检验真理的唯一标准。

五岳之巅2011-10-14 21:08:04

朱宝艳就是我的一个女学生,本来是做了专升本的习题解决问题,然后给自己做的笔记而已,而且写的很快很乱,只为自己看懂就是了。没想到被首页了,她肯定没有想挑战各位大牛C语言的想法。请各位口下留情。
顺便说一下:不要鸡蛋里挑骨头,所谓上述两个问题,
一个是一道考试题:printf("%d",'\xe0');问结果是多少?
一个就是我给她留的问题:
i=1;
j=(i++)+(++i)+(i++)+(i++)+(i++)+(++i)等于几?
现在我一直在惊讶,davelv老兄,我如何如人子弟?想听听你这位不误人子弟的高见。
学C语言的时候,你老是要是以上两个问题没给你讲好,才叫误人子弟!
以后别自己不会,就说别人弄不对,一瓶子不满,在这半瓶子晃荡。

KennyDark2011-10-14 19:46:26

还有, 这个怎么看怎么恶心~~ a=i+++i+++i++ ~~~~
而且不保证运行是你想要的结果 标准对这种情况的说法是:
程序员自己负责~~~~