【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)。也就是说内存的配置还是根据现在的字节进行优化的。