C语言提供了6种位运算符:&(与运算符,按位与),|(或运算符,按位或),^(异或运算符,按位异或),~(非运算符,按位取反),<<(左移运算符,向左移位,低位补0),>>(右移运算符)

左移运算

1.左移运算(向左移位,低位补0) 无需考虑运算数是 有符号数 还是 无符号数,均是在低位补0。

2.左移运算后,若数值超出数据类型的取值范围 (溢出),就会发生数据截断 (高位丢失,保留低位)。

  • 截断后,数据的值,甚至符号位都可能会发生改变(有符号数,左移后可能会由正数变为负数(如图①),也可能会由负数变为正数(如图②))

3. 针对数据溢出截断问题,可以将短数据类型 转成 长数据类型 (位数扩展)。如8位的char 转成 16位的short、32位的int、64位的long

  • 无符号数的位数扩展,左边补0

  • 有符号数的位数扩展,左边补符号位 (符号位是0就补0,符号位是1就补1)

  • 注意:数据进行位数扩展后,数值不会发生改变。

b1发生溢出,截取低8位1111 1100 ; b2进行了位数扩展,没有发生溢出。

4.左移运算中,a<<1 相当于 a乘以212^{1}21 ; a<<n 相当于 a乘以2n2^{n}2n

右移运算

右移运算需要考虑数值是有符号数还是无符号数两种情况,所以对有符号数和无符号数不理解的先去看看 c语言中的有符号数(signed)和无符号数(unsigned)

1. 右移运算分 无符号右移(逻辑右移) 和 有符号右移(算数右移)

  • 逻辑右移:高位补0

  • 算术右移:高位补符号位 (符号位是0就补0,符号位是1就补1)

2. 因为右移运算是向下取整,而/整除运算是向0方向取整。所以a>>1 相当于 a除以212^{1}21 ,这个结论只有正数适用,而负数不适用。

3. c语言中逻辑右移和算术右移都用 >> 表示。 java中>>表示算术右移,>>>表示逻辑右移 (注意:java没有<<<运算符)


通过位运算交换两个变量的值 (扩展)

1. 常规方法中,想要交换两个变量的值。一般是定义一个临时变量temp来存储其中一个值,然后再进行交换。

int a = 10, b = 20;int temp = a;
a = b;
b = temp;

2. 通过位运算交换,不必声明额外的空间。

int a = 10, b = 20;a = a^b;
b = a^b;     //b=b^a=b^a^b=0^a=a
a = a^b;     //a=a^b=a^b^a=b

移位运算符<< >>相关推荐

  1. java中的移位运算符

    移位运算符是在数字的二进制形式上进行平移.主要有左移(<<).带符号右移(>>)以及无符号右移(>>>). 左移运算符(<<)的运算规则为:按二进 ...

  2. python左移位运算_python移位运算符

    1,二进制方式 >>> bin( 1)'0b1' >>> bin( 10)'0b1010' >>> a =0b10>>>a2 & ...

  3. java 偏移符号_java中的移位运算符总结

    java中的移位运算符:<>,>>>总结 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> ...

  4. java中 移位运算_java中关于移位运算符的demo与总结(推荐)

    首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种. << 左移运算符,表示将左边的操作数的二进制数据向左移动*位,移动后空缺位以0 ...

  5. java学习(21):移位运算符

    //移位运算符 public class test{ public static void main(String[] args){ int num=3; //向左移位 System.out.prin ...

  6. java中的位移运算符_java中的移位运算符(, , )

    java中有3种移位运算符 < >>  :  右移运算符,不改变符号位,num >> n 表示二进制右移n位,结果相当于 num / (2的n次方) >>&g ...

  7. verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...

    Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符+,-,*,/,% 优先顺序 !~ *  /   % +    - <<    >& ...

  8. 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误

    1 致谢 感谢张晓龙院长编写的<Java程序设计与开发>提供的资料 2 问题描述 今天遇到1个很奇怪的问题 写一句很简单的运算代码就出错了 想不明白为什么  当时的初衷是这样的:想要完成1 ...

  9. 2 lt lt 8运算 java_Java移位运算符 lt;lt; gt;gt; gt;gt;gt;_Java_七九推

    简述 java有三种移位运算符,分别为: 左移运算符 << 右移运算符 >> 无符号右移运算符 >>> 首先,移位运算符根据名字可知是使用二进制进行运算的.在 ...

  10. 【C语言】利用队列的思维理解移位运算符和移位函数

    在c语言中,尤其是单片机的C51中,移位运算操作很常见.实现移位操作的方法有两种:一是利用移位运算符,二是利用移位函数. 目录 一.移位运算符 1.左移 2.右移 二.循环移位函数 三.移位运算符和循 ...

最新文章

  1. PHP 自定义session储存 数据库 方式类   高洛峰 细说PHP
  2. XDOC云服务API(二)
  3. jbpm视频教程全集下载【21讲完整】
  4. 串级pid算法c语言实现,【开源】分享一个经典的串级PID算法,附源代码
  5. visio画图复制粘贴到word_怎么将visio绘图导入Word(visio绘图插入word后如何调整大小)...
  6. Python 基础语法
  7. win10系统怎么查看密钥?
  8. Android 不透明度 对应表
  9. 超级账本 —— 面向企业的分布式账本
  10. office办公所有版本齐全
  11. 电脑操作实用技巧60招(转)
  12. 关于“小于/等于/大于”的英文缩写
  13. 网络基础之VLAN和端口类型(access、trunk和hybrid)
  14. 操作Mongodb数据库及性能测试
  15. JAVA 类的继承(私有属性、自动转型)(入门级小白一看就懂)
  16. Dynamics CRM FORM脚本库加载本地脚本
  17. Android最强保活黑科技的最强技术实现
  18. 常用Benchmark
  19. 虚拟主机绑定多个网站htaccess写法
  20. STC32G12K128-Beta WS2812控制 RGB与HSV互相转换

热门文章

  1. 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
  2. Jupyter修改默认文件保存路径
  3. 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)...
  4. JavaScript获取图片的原始尺寸
  5. bzoj2662:[BeiJing wc2012]冻结
  6. Ajax异步方式实现登录与參数的校验
  7. php学习日志(3)-echoprint
  8. 读《编程之美》读后感3
  9. [转]Eclipse+pydev 常用快捷键
  10. python--迭代,生成