一.移位运算
左移<<
右移>>
例题:将short类型数据的高、低字节互换
代码:
short a=0xf245,b,c;
b = a>>8;//右移8位,将前8个高位移到 后八个低位 ,高8位补1
c = a<<8;//左移8位,将后8个高位移到 前八个低位
b = b&0x00ff;//将b的高8位清0
a = b+c;
printf("b=%x\n",b) ;
printf("c=%x\n",c) ;
printf("a=%x",a) ;
结果:
b=f2
c=4500
a=45f2
思路:分别将a的高8位和低8位保存在b,c中,b,c中的其余个位为0,然后a = b+c;
分析:
a右移8位得到b,b中保存a的之前的高八位,但是由于a是有符号浮点数,并且二进制表达形式可以看出,符号为1,故b的高8位全部都补1。所有这个时候右移得到的b的值其实为:0xfff2
要想通过b+c得到a,必须将b的高8位变成0,所以b = b & 0x00ff;就可以使得b的高8位清0;
这两句话可以缩减成一句话:
c = (unsigned)a>>8;
a左移8位得到c,c中保存a的之前的低八位,c的低8位补0即可。
二.逗号运算符
逗号运算符的值:最后一个表达式的值
如:
a=4,b=a+5,b++的值为9
三.sizeof
1.定义:能获取变量和数据类型所占内存大小(字节数)的运算符
2.格式:
sizeof 表达式
sizeof (数据类型名或表达式)
3.结果(int型)
sizeof(基本数据类型)
sizeof(char) 1
sizeof(int) 2
sizeof(float) 4
sizeof(double) 8
sizeof(指针类型)
都是8
sizeof(数组)
是数组的总字节数
sizeof(字符串或者数值)
例如: sizeof(8) = 4; //自动转化为int类型
sizeof(8.8) = 8; //自动转化为double类型,注意,不是float
sizeof(“ab”) = 3 //自动转化为数组类型,
//长度是4,不是3,因为加上了最后的’\0’符
//有资料说,会自动转化为指针类型(Linux为4)
//可能和操作系统与编译器有关系
sizeof(联合体)
当操作数是联合类型时,sizeof是其最大字节成员的字节数。