移位运算符<< >>
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
移位运算符<< >>相关推荐
- java中的移位运算符
移位运算符是在数字的二进制形式上进行平移.主要有左移(<<).带符号右移(>>)以及无符号右移(>>>). 左移运算符(<<)的运算规则为:按二进 ...
- python左移位运算_python移位运算符
1,二进制方式 >>> bin( 1)'0b1' >>> bin( 10)'0b1010' >>> a =0b10>>>a2 & ...
- java 偏移符号_java中的移位运算符总结
java中的移位运算符:<>,>>>总结 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> ...
- java中 移位运算_java中关于移位运算符的demo与总结(推荐)
首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种. << 左移运算符,表示将左边的操作数的二进制数据向左移动*位,移动后空缺位以0 ...
- java学习(21):移位运算符
//移位运算符 public class test{ public static void main(String[] args){ int num=3; //向左移位 System.out.prin ...
- java中的位移运算符_java中的移位运算符(, , )
java中有3种移位运算符 < >> : 右移运算符,不改变符号位,num >> n 表示二进制右移n位,结果相当于 num / (2的n次方) >>&g ...
- verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...
Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符+,-,*,/,% 优先顺序 !~ * / % + - << >& ...
- 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误
1 致谢 感谢张晓龙院长编写的<Java程序设计与开发>提供的资料 2 问题描述 今天遇到1个很奇怪的问题 写一句很简单的运算代码就出错了 想不明白为什么 当时的初衷是这样的:想要完成1 ...
- 2 lt lt 8运算 java_Java移位运算符 lt;lt; gt;gt; gt;gt;gt;_Java_七九推
简述 java有三种移位运算符,分别为: 左移运算符 << 右移运算符 >> 无符号右移运算符 >>> 首先,移位运算符根据名字可知是使用二进制进行运算的.在 ...
- 【C语言】利用队列的思维理解移位运算符和移位函数
在c语言中,尤其是单片机的C51中,移位运算操作很常见.实现移位操作的方法有两种:一是利用移位运算符,二是利用移位函数. 目录 一.移位运算符 1.左移 2.右移 二.循环移位函数 三.移位运算符和循 ...
最新文章
- PHP 自定义session储存 数据库 方式类 高洛峰 细说PHP
- XDOC云服务API(二)
- jbpm视频教程全集下载【21讲完整】
- 串级pid算法c语言实现,【开源】分享一个经典的串级PID算法,附源代码
- visio画图复制粘贴到word_怎么将visio绘图导入Word(visio绘图插入word后如何调整大小)...
- Python 基础语法
- win10系统怎么查看密钥?
- Android 不透明度 对应表
- 超级账本 —— 面向企业的分布式账本
- office办公所有版本齐全
- 电脑操作实用技巧60招(转)
- 关于“小于/等于/大于”的英文缩写
- 网络基础之VLAN和端口类型(access、trunk和hybrid)
- 操作Mongodb数据库及性能测试
- JAVA 类的继承(私有属性、自动转型)(入门级小白一看就懂)
- Dynamics CRM FORM脚本库加载本地脚本
- Android最强保活黑科技的最强技术实现
- 常用Benchmark
- 虚拟主机绑定多个网站htaccess写法
- STC32G12K128-Beta WS2812控制 RGB与HSV互相转换
热门文章
- 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
- Jupyter修改默认文件保存路径
- 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)...
- JavaScript获取图片的原始尺寸
- bzoj2662:[BeiJing wc2012]冻结
- Ajax异步方式实现登录与參数的校验
- php学习日志(3)-echoprint
- 读《编程之美》读后感3
- [转]Eclipse+pydev 常用快捷键
- python--迭代,生成