C语言位运算总结
2016-04-26 15:17
344 查看
位运算(对整数在内存中的二进制位进行操作,所有位运算只能操作整型)
作用:直接通过操作二进制位来运算,高效
1、&按位与 同1为1
2、|按位或 同0为0
3、^按位异或 相同为0 不同为1
0)一个整数^0结果是本身
1)相同整数相^是0
2)一个数^另一数两次结果不变2^3^3==2
3)整数相^与顺序无关 3^2^3==2
4、~取反(单目运算) 对整数的各二进位取反,包括符号位 0-1 1-0
1、计算机里,补码原码反码,表现形式不同,最终表示的结果是一样的,是指真实的值相等,三码为了计算机运算方便
2、正整数:补码==反码==原码 表现形式相同
3、负整数:原码:有符号数的二进制数
反码 = 原码符号位不变其余取反
补码=反码+1
4、取反的快捷运算 == (-)原数-1 ~2==(-2)-1
5、<<左移:
1)方法:把整数的各二进位全部左移n位,高位舍弃(包括符号位),低位补0 。
2)规律:原数 << n == 原数*2 ^ n
但移动后符号位变化除外,符号位改变则正负改变,此时规律不可用
3)注意:左移时符号位也跟着移动
6、>>右移:
1)方法:符号位不变,除符号位,整体右移n位,低位舍弃。高位的空缺是正数补0,是负数补0/1由编译器决定。
2)规律:原数 >> n == 原数÷2 ^ n
不会改变原数的正负,此规律适用于所有右移
3)注意:右移时符号位不跟着移动
3>>1
00000000 00000000 00000000 00000011
0 0000000 00000000 00000000 0000001 1(移出)
-----------------------------------------------
符号位是0,高位由于右移产生的空位补0
00000000 00000000 00000000 00000001---1
3>>2
00000000 00000000 00000000 00000011
0 0000000 00000000 00000000 000000 11(移出)
----------------------------------------------
00000000 00000000 00000000 00000000---0
7、注意:浮点数不能位移运算
8、为什么计算机内需要位移运算
1)一般思路计算乘法
7*8 == 7*2^3 == 7<<3 0111
00111000 == 56
0111
1000
------
0000
0000
0000
0111
-------
00111000 == 56
作用:直接通过操作二进制位来运算,高效
1、&按位与 同1为1
2、|按位或 同0为0
3、^按位异或 相同为0 不同为1
0)一个整数^0结果是本身
1)相同整数相^是0
2)一个数^另一数两次结果不变2^3^3==2
3)整数相^与顺序无关 3^2^3==2
4、~取反(单目运算) 对整数的各二进位取反,包括符号位 0-1 1-0
1、计算机里,补码原码反码,表现形式不同,最终表示的结果是一样的,是指真实的值相等,三码为了计算机运算方便
2、正整数:补码==反码==原码 表现形式相同
3、负整数:原码:有符号数的二进制数
反码 = 原码符号位不变其余取反
补码=反码+1
4、取反的快捷运算 == (-)原数-1 ~2==(-2)-1
5、<<左移:
1)方法:把整数的各二进位全部左移n位,高位舍弃(包括符号位),低位补0 。
2)规律:原数 << n == 原数*2 ^ n
但移动后符号位变化除外,符号位改变则正负改变,此时规律不可用
3)注意:左移时符号位也跟着移动
6、>>右移:
1)方法:符号位不变,除符号位,整体右移n位,低位舍弃。高位的空缺是正数补0,是负数补0/1由编译器决定。
2)规律:原数 >> n == 原数÷2 ^ n
不会改变原数的正负,此规律适用于所有右移
3)注意:右移时符号位不跟着移动
3>>1
00000000 00000000 00000000 00000011
0 0000000 00000000 00000000 0000001 1(移出)
-----------------------------------------------
符号位是0,高位由于右移产生的空位补0
00000000 00000000 00000000 00000001---1
3>>2
00000000 00000000 00000000 00000011
0 0000000 00000000 00000000 000000 11(移出)
----------------------------------------------
00000000 00000000 00000000 00000000---0
7、注意:浮点数不能位移运算
8、为什么计算机内需要位移运算
1)一般思路计算乘法
7*8 == 7*2^3 == 7<<3 0111
00111000 == 56
0111
1000
------
0000
0000
0000
0111
-------
00111000 == 56
相关文章推荐
- C语言类型修饰符总结
- C/C++复习:职工信息(结构体)
- 《effectivec++》不在构造和析构过程中调用virtual函数
- C语言封装sqlite3_API
- C/C++复习:分数减法(结构体)
- C++字符串
- 链表实现队列 C++实现
- C/C++复习:学生信息排序(结构体)
- Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
- 大数乘法 - 大数作为字符串的C语言操作
- c++第四次上级实验——分数求和
- C++使用Sqlite3,使用CppSQLite3的封装
- c语言中const关键字详解
- c++ 趣味小程序
- C 语言中指针、字符串与数组的一些关系
- c语言 #define 中的UL
- extern "C" c++如何实现函数的重载
- C++多态性
- C++封装继承多态总结
- C++多维数组