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

上一篇:sql小练习

下一篇:没有了

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

ilwmin2011-10-14 16:30:57

日,这也行?

pmerofc2011-10-14 15:37:15

两点全是错的
这样的博文居然上头版
天理难容

KennyDark2011-10-14 12:54:12

五岳之巅:其实第一个问题上课讲过,我举了个-2的例子说明原码和补码,正数与负数;第二个问题的处理技巧上课时也是讲过的,最后还有个超长的练习题。
i=1;
j=(i++.....
j=(i++)+(++i)+(i++)+(i++)+(i++)+(++i)......
阿强的题目,怀念啊....
但对于专业的程序员来说, 这种做法不规范,这种写法不入流
我觉得这样写比较好:
i = 1;
++i;
j  = 6 * i;
j -= i;
j += (++i);
i += 4;
上面在gcc下编译, 与j=(i++)+(++i)+(i++)+(i++)+(i++)+(++i)结果相同

五岳之巅2011-10-13 21:09:46

时间长了,再快得菜刀也很会生锈,知识就是这样,总不用就忘了。今天上课想说英文的四月,可我怎么也想不起来,郁闷坏了。下课赶紧查,结果是April。

五岳之巅2011-10-13 21:07:22

其实第一个问题上课讲过,我举了个-2的例子说明原码和补码,正数与负数;第二个问题的处理技巧上课时也是讲过的,最后还有个超长的练习题。
i=1;
j=(i++)+(++i)+(i++)+(i++)+(i++)+(++i)等于几?