左移位和右移位
来源:互联网 发布:查看sql文件乱码 编辑:程序博客网 时间:2024/04/30 01:34
移位操作只是简单地把一个值的位向左或向右移动。
移位操作符
右移位操作符 >>
左移位操作符 <<
左移位
在左移位中,值最左边的几位被丢弃,右边多出来的几个空位则由0补齐。下面是一个左移位例子。
对于一个数n,左移4位,n<<4。
当n=7时,二进制表示 0000 0111
向左移动4位,空位补0 0111 0000 (十进制为112)
当n=-7时,二进制表示 1000 0111
向左移动4位,空位补0 1111 0000 (第一位为符号位,不变,十进制为-112)
当n=-1时,二进制表示 1000 0001
向左移动4位,空位补0 1001 0000 (第一位为符号位,不变,十进制为-16)
因此左移位时不管是整数还是负数,右边移入的位用0填充,称为逻辑移位。
右移位
右移位有两种情况,一种是跟左移位相同的逻辑移位,即左边移入的位用0填充;另一种是算术移位,左边移入的位由原先该值的符号位决定,符号位为1,则移入的位均为1,符号位为0则移入的位均为0。
下面是右移位的例子
对于一个数n,右移4位,n>>4。
当n=7时,二进制表示为 0000 0111
向右移动4位,空位补0(符号位为0) 0000 0000(十进制为0)
当n=16时,二进制为 0001 0000
向右移动4位,空位补0 0000 0001(十进制为1)
当n为负数时,此时向右移位不是简单的将负数的二进制为向右移动,而是将负数存储于内存中的补码向右移动。看下面的例子:
当n=-1时,二进制表示为 1000 0001
补码为 1111 1111
右移四位再补四位后 1111 1111(还是-1的补码)
当n=-2时,二进制表示为 1000 0010
补码为 1111 1110
右移四位 1111 1111(-1的补码)
当n=-16时,二进制表示为 1001 0000
补码为 1111 1111
右移四位 1111 1111(-1的补码)
当n=-32时,二进制表示为 1010 0000
补码为 1110 0000
右移四位 1111 1110(此时为-2的补码)
注意类似这种形式的移位:
a<<-5
左移-5位表示什么呢?是表示右移5位吗?还是根本不移位?在某台机器上,这个表达式实际执行左移27位的操作。当移位的位数比操作数的位数还要多时,这种行为是未定义的。
- 左移位和右移位
- 移位操作---左移和右移
- 移位运算(左移和右移)
- java <<(左移位) 与 >>(右移位)
- 右移位,右移位
- C#移位运算(左移和右移)
- C#移位运算(左移和右移)
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- C#移位运算(左移和右移)
- java的移位操作详解,左移和右移
- C#移位运算(左移和右移)
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- Java的移位操作!!【左移和右移】
- java的移位操作详解,左移和右移
- 左移位
- 论网站更新与seo优化的关系
- Xcode9学习笔记48
- 一分钟实现分布式锁
- Windows下tensorflow安装 win64+Python3.5
- 模板整理: 图论---二分图匹配
- 左移位和右移位
- 019 矩阵对角化
- NOIP模拟 路径统计 【弗洛伊德算法】
- noip中STL总结
- 永别OI
- 网络IO之阻塞、非阻塞、同步、异步总结
- 连接池原来这么简单
- 防非法登陆
- 可变长参数