基础…
某题目:问下面的程序需要几次才能跳出循环?
unsigned int a =1; int b = 0; while ( a+b >= 0){ b--; }
开始以为a会转换为int类型,这样循环只需要2次就结束了。测试程序后发现这是个死循环。今天看《The C Programming Language》,赫然发现”转换”一节中,提到了”整数提升”一词。规定:在一个表达式中,如果原始类型的所有值都可以用int类型表示,则其值将被转换为int类型,否则将被转换为unsigned int类型。
我感觉很多时候我花了大把时间来搞明白,甚至以为是很高深的问题,答案却明白的写在书上。书读百遍,其意自现,少开QQ多看书。
Sandy说你来试一题:不用sizeof如何知道机器是32位还是16位?
想了很久后,我觉得还是从指针所占的空间入手。因为32位机器寻址,指针需要占4个字节,同理16位机器指针只需2个字节。于是想到如果给一个指针赋值在(max(16), max(32)]区间,那么16位机器应该会把高位截断,这样就可以区别开来。
char *p; p = 0x10001;//如果为16bit,那么最高位的1将被忽略。 if(p == 1) printf("16\n"); else printf("32\n");
但是这种方法gcc给出了警告,Sandy说有的编译器都可能报Error。他的方法是:
int a=0xffff; if(a<0) { printf("16位"); }else { printf("32位"); }
中午从Church出来,和Father Wang一起去吃饭。碰到了几个他的外国朋友,他们聊得很开心,我愣在那里。突然有个过来跟我握手,然后”nice to meet you,i’m Tom”,我继续愣了下,才想起来要说什么。于是,开始把初中背熟的那几段抛出来,问候+自我介绍+天气。末了,他说”You speak English very well”,赶紧说”thank you”…这次不等他们过来了,直接过去跟他们一个个问候,结识了几个朋友。
4 Comments are ready?
How do you do? I’m fine, thank you, and you? I’m fine, too.
[回复]
boluor 回复 于 十月 26th, 2009 at 22:31
我还说了I major in Information Security等等…再咋说俺也是大学生阿
[回复]
第一个程序,似乎在Felix那里看到过。
[回复]
Hello,
Thanks for article. Everytime like to read you.
Hobosic
[回复]
路过。我觉得你应该把STL的东西整理一下写一写。
[回复]
boluor 回复 于 十月 27th, 2009 at 17:39
嗯,确实有这个必要。
[回复]