c 位运算
来源:互联网 发布:美工废物利用教案 编辑:程序博客网 时间:2024/06/08 01:12
位运算
c:精确控制内存,充分利用cpu
移位指令:
1.算数移位指令
sal eax,1sal ax ,1sal al ,1 1000 0001 八位 0x81,左移cf:1 al :0000 0010 0x02
左移sal,最高位放入cf,最低位补0
右移sar,移位放入cf,最高位补符号位
sar al,1 0x81 cf :1 。1100 0000 0xc0
2.逻辑移位指令
shl al,1 左移和算数sal一样
shr al,1 逻辑右移只补0
3.循环移位指令
rol 循环左移,cf:拿出的值,最高位放入最低位
rol al,1 al:0x81 1000 0001
cf:1 al:0000 0011
ror 循环右移
ror al,1 al:0x81 1000 0001
cf:1 al:0xc0 1100 0000
4.带进位的循环移位指令
cf位为整个移位的里面,cf位放入最低位,依次循环,
rcl al,1
cf:0 al:0x81
cf:1 al:0000 0010 0x2
rcr al,1
cf:0 al:0x81
cf:1 al:0100 0000 0x40
c语言位运算
int main(int argc ,char* argv[]){ char x =2; char y =3; printf("%d\n",x&y);//2 // 0000 0010 // 0000 0011 //------------- // 0000 0010 printf("%d\n",x|y);//3 // 0000 0010 // 0000 0011 //------------- // 0000 0011 printf("%d\n",!x);//这里逻辑取反 0 printf("%d\n",~x);//这里逻辑取反 0xfd // 0000 0010 //------------- // 1111 1101 printf("%d\n",x^y);//只有不一样的时候才是1 // 0000 0010 // 0000 0011 //------------- // 0000 0001 } int main(int argc ,char* argv[]){ char x =8; //mov dword ptr[ebp-4],8 printf("%d\n",x<<1); //mov eax,dword ptr[ebp-4] //shl eax,1 //push eax } int main(int argc ,char* argv[]){ unsgined char x =8; //mov dword ptr[ebp-4],8 printf("%d\n",x<<1); //mov eax,dword ptr[ebp-4] //shl eax,1 //push eax } int main(int argc ,char* argv[]){ char x =8; //mov dword ptr[ebp-4],8 printf("%d\n",x>>1); //mov eax,dword ptr[ebp-4] //sar eax,1 //push eax } int main(int argc ,char* argv[]){ unsigned char x =8; //mov dword ptr[ebp-4],8 printf("%d\n",x>>1); //mov eax,dword ptr[ebp-4] //shr eax,1 //push eax }
unsigned char x=0x56;
比如要将第3位置1: x|=0x0008;
要将第3位清0: x&=0xf7;
将最高三位设置成101:x&=0x1f; x|=0xa0;
倒数第n 位
(x >> (n - 1)) & 1
或
x & (1 << (n - 1)) 判断是否为0
阅读全文
0 0
- C-枚举,位运算
- C语言位运算
- C语言位运算
- 【C++】位运算符
- C语言位运算
- c语言位运算
- 【C++】位运算符
- C语言位运算
- C位运算
- c语言位运算
- C /C++ 位运算
- C位运算总结
- C:位运算
- C语言位运算
- C 位运算 2
- C位运算
- C位运算
- C/C++位运算
- Noip2017全面总结
- C++输入cin,cin.get(),cin.getline()详细比较及例子
- 4-leetcode-Median of Two Sorted Arrays
- delete加不加[]的区别
- ACM Computer Factory POJ
- c 位运算
- Eclipse常用快捷键大全
- 朝花夕拾之机房收费系统
- 【angular】指令及数据绑定入门
- 信安实践1:ubuntu16.04安装apache2,php5.6,mysql……
- 安卓 Recycleview的点击事件
- 数据结构,头插法和尾插法的关键代码
- java 第二章 基本数据类型与数组
- Linux安装JDK详细步骤