博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java位操作大全(通用于C语言)
阅读量:4555 次
发布时间:2019-06-08

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

欢迎转载,转载请注明出处:

位操作主要应用:

位操作主要用在驱动、嵌入式等底层开发中;以前做Android开发时,发现人家做驱动的使用位操作真是相当频繁,有些情况下,每一位代码什么都写得明明白白;尤其是那些寄存器操作时用到的更多。除此之外,通信领域也是用得非常多的,这点可想而知;尤其是在无线通信,每一位都是非常精贵的,还记得我几年前去面试一个深圳通信公司,那给的就是一道用C操作一个IP的题目,就是要求用位操作实现,细节就不说了。

操作对象:

在讲具体位操作之前,我们首先需要知道数字在计算机里是怎么存储的:计算机里的数字是以补码的方式存储的。

补码定义:

  • 正数的补码就与原码相同
  • 负数的补码就是除符号位之外取反,然后整个数再加1
  • 0的补码为0000 0000(考虑8位存储)
  • -128的补码为1000 0000(由公式2^8-2^7计算得出,不能由之前定义得出)

补码存储带来的好处:

  1. 减法按加法处理
  2. 符号位同其它位一同处理
  3. 两个补码相加的,如果最高位有进位,那进位自动舍弃。

在不考虑溢出等情况:负数的补码最左边的1,相当于正数最左边的0,可以随便补。知道这点对之后的移位操作很有用。

位操作符

&     与

|      或

^    异或:相同为0相异为1

~    非

>>  算术右移(移位后左空位补法:正数补0,负数补1)

<<   算术左移(移位后右空位补0)

>>> 逻辑右移(左空位一率补0,不考虑正负)

举几个典型例子(考虑Java中的整型,如果是C的话,与具体环境有关,例子不能通用):

// x右数第三位值是否为1

      0x04&x==0x04

// 把右数第三位置1

      x = 0x04 | x;

// -128(1000 000 00000000 00000000 00000000)向左移一位

      println( Integer.MIN_VALUE<<1 ); //值应当为0

// 把-2(11111111 11111111 11111111 1111 1110)向右算述移位

      println( -2>>1 ); //值应当为-1

// 把-2向右逻辑移位

      println( -2>>>1 ); //值应当为2147483647

 

转载于:https://www.cnblogs.com/mrhe/archive/2012/07/18/2597148.html

你可能感兴趣的文章
Codeforces 1000C Covered Points Count 【前缀和优化】
查看>>
python高效读取文件、文件改写
查看>>
gulp
查看>>
pgsql查询优化之模糊查询
查看>>
[转]-Gradle使用手册(三):构建任务
查看>>
ExtJS下拉树
查看>>
android 调用系统相机录像并保存
查看>>
BW系统表的命名规则
查看>>
Asp.Net在IE10下出现_doPostBack未定义的解决办法 LinkButton
查看>>
《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(一)
查看>>
1-9 RHEL7-文件权限管理
查看>>
apache服务器安装
查看>>
Search a 2D Matrix
查看>>
文件解析漏洞
查看>>
弹性成像的一些术语
查看>>
作业2
查看>>
vim 笔记
查看>>
MySQL的基本使用命令
查看>>
output 参数在存储过程中的用法
查看>>
大数加法和乘法(高精度)
查看>>