• 对偏移表达式的 思考过程—how offset macro is think out


          /* 小结:

          品味取成员的偏移,不是支取偏移,不是先取偏移再成员。

          不能对常量取& 的解决。

          指针运算的前提。某某指针不能转换为另一个指针

          解决宏的方法。先一个表达式一个表达式的测试,再转化为宏。

          最后,hxf总结出来的一般性原则,,任意地址,任意对象。。使用只不过是个geek

          */

          /************************************************************************/

    /************************************************************************/

    /* 对偏移的宏 由来的 思考                                                                   */

    /************************************************************************/

    typedef struct z

    {

          int a;

          double b;

          long c;

    } myZ;

    void test_偏移宏的变迁(){

          cout<<& ( ( myZ *)0 )->b ;// test for cool

          cout<<endl;

          cout<<& (   (myZ *)  (  (void *) 0)  )->b; // 多加括号,包括强制转换符号

          cout<<endl;

         

          //

          //

          cout<<"reay for void *"<<endl;

          & (   (myZ *)  (  (void *) 0x1234)  )->b; // 多加括号,包括强制转换符号

          & (   (myZ *)  (  (void *) 0x987600000)  )->b; // 多加括号,包括强制转换符号

          cout<<     & (   (myZ *)  (  (void *) 0x9876)  )->b;

          cout<<endl;

          cout<<     & (   (myZ *)  (  (void *) 0x9876)  )->a;

          cout<<endl;

          //   cout<<     & (   (myZ *)  (  (void *) 0x9876)  ) 单独报错误

          //

          //后面加了->a

          cout<<"验证任意的, one is  0x987600000 ; one is void * 0 ; one is just 0 ;one is for 0x123456789 …. "<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  (void *) 0x987600000)  )->b  -   (unsigned int)  & (   (myZ *)  (  (void *) 0x987600000)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  (void *) 0)  )->b  -    (unsigned int)  & (   (myZ *)  (  (void *) 0)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  0)  )->b  -    (unsigned int)  & (   (myZ *)  (  0)  ) ->a );

          cout<<endl;

          //扩展

          cout<<      ( (unsigned int) & (   (myZ *)  (  0x123456789)  )->b  -   (unsigned int)  & (   (myZ *)  (  0x123456789)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  -1)  )->b  -   (unsigned int)  & (   (myZ *)  ( -1)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>32)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>32)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>64)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>64)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>65)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>65)  ) ->a );

          cout<<endl;//我的机器位,看来已经溢出了。

          /************************************************************************/

    }

    int _tmain(int argc, _TCHAR* argv[]){

          test_偏移宏的变迁();

          getchar();

          return 0;

    }

    image

  • 相关阅读:
    codeforces 336D Vasily the Bear and Beautiful Strings(组合数学)
    13年山东省赛 The number of steps(概率dp水题)
    13年山东省赛 Mountain Subsequences(dp)
    13年山东省赛 Boring Counting(离线树状数组or主席树+二分or划分树+二分)
    codeforces 337C Quiz(贪心)
    codeforces 336C Vasily the Bear and Sequence(贪心)
    codeforces 335A Banana(贪心)
    codeforces 339C Xenia and Bit Operations(线段树水题)
    codeforces 339C Xenia and Weights(dp或暴搜)
    codeforces 340E Iahub and Permutations(错排or容斥)
  • 原文地址:https://www.cnblogs.com/titer1/p/2411219.html
Copyright © 2020-2023  润新知