博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位元 字组 二进制运算 以及 编码
阅读量:5051 次
发布时间:2019-06-12

本文共 1034 字,大约阅读时间需要 3 分钟。

字组就是把一个数的二进制的各位看成数组~~

<1>计算机中的反码与补码;

最高位:正数为0,负数为1;

正整数的原码,反码,补码均相同;

负数的反码:符号位不变,在原码的基础之上数值位取反;

负数的补码:求出反码后加1;如-1(只看8位);原码:1000 0001 反码:1111 1110 补码:1111 1111; //在使用scanf()输入到EOF时返回-1;这是我们可以使用位取反运算符变为0,即将所有(包括符号位)的1变为0~~

 

<2>位运算

1.把字组中最靠右的1变为0:  如 0101 1110 => 0101 1100

  x & (x - 1);

2.取出字组中最靠右的1 (数值不是第几位):  如 1010 0100 => 0000 0100

  x & (-x);  // 树状数组中的lowbit()

3.最低位0变为1: 如 1010 0111 => 1010 1111

  x|(x+1)   //x+1具有递推性

4.把字组尾部的1都变成0:如1010 0111 => 1010 0000

  x & (x + 1) //删除用 &

5.把字组尾部的0变为1:如 1010 1000 => 1010 1111

  x | (x - 1) //添加用 |

6.把字组中最靠右且值为0的位元变为1,其余位元置0; 如 1010 0111 => 0000 1000

  ~x & (x + 1) //注意取反

7.把字组中最靠右且值为1的位元变为0,其余位元置1;如 1010 1000 => 1111 0111

  ~x | (x - 1) // x - 1只是将x的最低为1的位元置0;并且把尾部为0的位元变为1

8.把字组尾部为0的位元置1,其余位元置0;如 1010 1000 = > 0000 0111

  ~x & (x - 1)  可以发挥处理器的某些指令级优化,还可以使用 (x & -x) - 1

9.把尾部的所有值为1的位元都变成0,其他位都置为1;如 1010 0111 => 1111 1000

  ~x | (x+1)

10.把最靠右且值为0的位元及其右方所有值为1的位元都置为1,其他位元设为0;如 0101 0111 = > 0000 1111

  x ^ (x + 1) // xor同样能把原数中的字组1删除

待续~~

转载于:https://www.cnblogs.com/hxer/p/5217841.html

你可能感兴趣的文章
online学习和offline学习
查看>>
win10安装多个mysql实例
查看>>
ASP.NET Core本身已经集成了一个轻量级的IOC容器
查看>>
JavaScript | 事件
查看>>
002 使用Appender扩展logger框架
查看>>
hdu4366 Successor (dfs序+zkw线段树)
查看>>
HDU 2674
查看>>
BUNOJ 4044
查看>>
JavaSctipt语句for循环的思考
查看>>
指令篇:ls、pwd、date、cal、bc、cd、mkdir、cp、mv、rm、basename、dirname
查看>>
框架代码 3
查看>>
CentOS7中编写java编译执行脚本
查看>>
Docker简介(1)
查看>>
Linux 脚本
查看>>
HDUOJ---1213How Many Tables
查看>>
php 中self,this的区别和实地操作
查看>>
代码混淆遇到的问题
查看>>
Hibernate的条件查询的几种方式
查看>>
idea没有绑远程地址,如何提交到github的空项目
查看>>
PermGen space错误解决方法
查看>>