文章目录
- 一、位运算:重点
- 学完本节之后你应该能自己写出UTF-8的编码和解码程序
- 1.按位与、或、异或、取反运算
- 二、移位运算
- 1.移位的要求:移动的位数必须小于左操作数的总位数
- 2.对于无符号数,二进制数左移一位相当于十进制数乘以2
- 3.对于无符号数,二进制数右移一位相当于十进制数乘除2
- 4.对于有符号数的右移而言
- 5.建议只对无符号数做位运算
- 三、移位操作与掩码
- 1.取出8~15位
- 2.将8~15位清0
- 3.将8~15位置1
- 4.习题
- 四、异或运算
- (1)异或运算的速度比movl指令的速度快
- (2)和0做异或保持原值不变,和1做异或得到原值的相反值
- (4)利用位运算可以这样做交换
- 五、条件运算符
- 六、sizeof运算符与typedef类型声明
- 1.sizeof 表达式
- 2.sizeof (类型名):求一个数组的长度
- 3.用 typedef 做一个类型声明
- 4.typedef 这个关键字用于给某种类型起个新名字
- 七、Side Effect与Sequence Point
- 1.详细解释各种Sequence Point
- 2.写表达式应遵循的原则
- 八、运算符总结
一、位运算:重点
学完本节之后你应该能自己写出UTF-8的编码和解码程序
1.按位与、或、异或、取反运算
(1)下面用二进制的形式举几个例子
(2)其它eg
二、移位运算
1.移位的要求:移动的位数必须小于左操作数的总位数
2.对于无符号数,二进制数左移一位相当于十进制数乘以2
3.对于无符号数,二进制数右移一位相当于十进制数乘除2
4.对于有符号数的右移而言
5.建议只对无符号数做位运算
三、移位操作与掩码
1.取出8~15位
比如掩码0x0000ff00表示对一个32位整数的8~15位进行操作,举例如下。
2.将8~15位清0
3.将8~15位置1
4.习题
int count(usigned int x)
{
int sum=0;
int i=0;
for (;i<32;i++)
{
if (((x>>i)&0x01)==0x01)
sum++;
}
return sum;
}
四、异或运算
(1)异或运算的速度比movl指令的速度快
(2)和0做异或保持原值不变,和1做异或得到原值的相反值
可以利用这个特性配合掩码实现某些位的翻转,例如:
(3)奇偶校验
(4)利用位运算可以这样做交换
五、条件运算符
eg:
六、sizeof运算符与typedef类型声明
1.sizeof 表达式
sizeof 表达式中的子表达式并不求值,而只是根据类型转换规则求得子表达式的类型,然后把这种类型所占的字节数作为整个表达式的值。
2.sizeof (类型名):求一个数组的长度
sizeof(类型名) 的括号则是必须写的,整个表达式的值也是这种类型所占的字节数。
3.用 typedef 做一个类型声明
4.typedef 这个关键字用于给某种类型起个新名字
七、Side Effect与Sequence Point
1.详细解释各种Sequence Point
eg:
why??
2.写表达式应遵循的原则
八、运算符总结
(1)
(2)左结合和右结合这两个概念只对双目运算符有意义,对于前缀、后缀和三目运算符我单独做了说明。