一.移位
int a = 2; cout << "常量 2 << 2: " << (2 << 2) << endl; //结果是8 cout << "变量 a << 2: " << (a << 2) << endl; //结果是8 cout << "常量 2 << 34: " << (2 << 34) << endl; //结果是0 cout << "变量 a << 34: " << (a << 34) << endl; //结果是8 int b = -2; cout << "常量 -2 << 2: " << (-2 << 2) << endl; //结果是-8 cout << "变量 b << 2: " << (b << 2) << endl; //结果是-8 cout << "常量 -2 << 34: " << (-2 << 34) << endl; //结果是0 cout << "变量 b << 34: " << (b << 34) << endl; //结果是-8
解释:
对于2<<34,是一个常数运算。编译器发现34>31(对于int32位,最大移动范围是31位),会直接得到结果0。
对于a<<34,含有变量的移位,汇编操作步骤是:34与31进行AND操作,结果为2(等价34%32=2)。即:0010左移两位。
二.结构体
结构体类型的定义格式为:strcut 结构体名 {成员说明列表} ;
结构体变量的定义有3种形式://----------------第一种------------------------------------ typedef struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构别名; 示例: typedef struct init_Color { int red; char pink; }Color; //struct init_Color等价于Color,也可以省略init_Color Color cl; cl.red=1; cl.pink='P'; //-------------------第二种---------------------------------- struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 示例: struct Color { int red; char pink; }cl; //结构体类型是struct Color,变量名是cl cl.red=1; cl.pink='P'; //-------------------------第三种----------------------------------- //定义一个无名称的结构体类型的同时定义结构体变量 struct { int red; char pink; }cl;//这样写的优点就是简单,缺点就是由于没有结构体名,后面无法用该结构定义新的变量。 cl.red=1; cl.pink='P';