基础…

  某题目:问下面的程序需要几次才能跳出循环?

        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?

  1. ivan said on: 2009年10月26日 22:07

    How do you do? I’m fine, thank you, and you? I’m fine, too.

    [回复]

    boluor 回复  于   

    我还说了I major in Information Security等等…再咋说俺也是大学生阿

    [回复]

  2. ivan said on: 2009年10月26日 22:09

    第一个程序,似乎在Felix那里看到过。

    [回复]

  3. Hobosic said on: 2009年10月27日 03:24

    Hello,
    Thanks for article. Everytime like to read you.
    Hobosic

    [回复]

  4. Sandy said on: 2009年10月27日 09:37

    路过。我觉得你应该把STL的东西整理一下写一写。

    [回复]

    boluor 回复  于   

    嗯,确实有这个必要。

    [回复]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*

*

click to changeSecurity Code