【C++ 学习笔记】 一些奇特的语法和指令

C++中有一些系统的语法和一些特有的指令,挺可爱的,想记下来。

1. 逗号的方便用法

      逗号在C++中表示,下面代码中第一行的用法大家应该很熟悉,a和b可以并列写是将a,b定义成了同一类型。而第二行的用法便很少见了。居然可以在赋值中用逗号隔开两个同类型的变量的赋值语句。崇拜下。

int a = 0, b = 0;
a = 10, b = 10;
std::cout<<a<<"  "<<b<<std::endl;

       语法灵感来源:《STL 源码剖析 229页》

 

2. 使用汇编语言

       在C++中可以使用汇编语言,只需要在前面加上关键词 __asm 即可(两条下划线)。单条语句如:__asm mov

 

3. 读取CPU时间戳代码  --- http://www.cppblog.com/gcs8cn/archive/2010/06/09/117469.html

      在Pentium以上的CPU提供了一条机器指令:RDTSC(Read Time Stamp Counter)。可以用这条指令来读取CPU上的时间戳。

 

4. 指定内置类型的位数

      如果你用的只是小额数字,那么计算机给的那些位自然是没有用了,怎么样来处理呢?可以用一个方法:在struct内指定内置类型的位数。如下面例子所示,便是构造了一个字的数据,其中前四位给了int b,后四位给了char a。有点吃大锅饭的感觉。

      以前固定的char是1个字节,int是一个字,long是一个通用寄存器,double是两个字背得很幸苦吧~原来内置类型也可以被指定位数的,不过当然要在struct结构里!格式如下所示:

struct {
    unsigned char a:4;          // 指定无符号char类型的变量a占4个位
    int b:4;                    // 指定int类型的变量b占8个位
};

       既然可以这么指定,那么在内存中是怎么使用的呢?我们输出看看(使用union可以输出,因为int i和struct的类型共用内存):

void main()
{
     union test
    {
      struct
     {
          unsigned char a:4;
          unsigned char b:4;
          unsigned char c:4;
     } bit;

      int i;
    } data;


      data.i = 0;
      data.bit.a = 1;
      data.bit.b = 2;
      data.bit.c = 3;
      printf("0x%04x\n",data.i );
}

      结果:0x0321

      即四个字节4bits给了a,4bits给了b,4bits给了c:  0000 0011 0010 0001 (红色为a,绿色为b,蓝色为c)。

      当然其内存的分配也不是完全依照值的大小从后往前排的,如:

struct
{
    unsigned char a:2;
    unsigned char b:3;
    unsigned char c:4;
}bit;

      结果:0x0309
      即: 0000 0011 0000 1001 (红色为a,绿色为b,蓝色为c)。也就是说内存的配置还是根据现在的字节进行优化的。

 

 

 

 

posted @ 2012-09-01 19:46  小卡的土豆园  阅读(375)  评论(0编辑  收藏  举报