Java中,位运算符,c语言右移运算符时左边何时补0,何时补1

追求卓越,成功就会在不经意间追上你!
java中有三种移位运算符
&& & & &: & & 左移运算符,num && 1,相当于num乘以2
&& & & &: & & 右移运算符,num && 1,相当于num除以2
&&& & &: & &&无符号右移,忽略符号位,空位都以0补齐
下面来看看这些移位运算都是怎样使用的
4 package com.b510.
* @author Jone Hongten
* @create date:
* @version 1.0
11 public class Test {
public static void main(String[] args) {
int number = 10;
//原始数二进制
printInfo(number);
number = number && 1;
//左移一位
printInfo(number);
number = number && 1;
//右移一位
printInfo(number);
* 输出一个int的二进制数
* @param num
private static void printInfo(int num){
System.out.println(Integer.toBinaryString(num));
运行结果为:
我们把上面的结果对齐一下:
位数--------
十进制:10
十进制:20
number = number && 1;
十进制:10
number = number && 1;
看了上面的demo,现在是不是对左移和右移了解了很多了呢
&无符号右移,忽略符号位,空位都以0补齐
value&&&&&num & & -- &&num&指定要移位值value&移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位&&无符号右移运算符&&&&只是对32位和64位的值有意义
阅读(...) 评论()java 移位运算符为何对右侧参数进行移位模32/64位运算 - ITeye问答
如题,这么设计目的什么啊?解决什么问题?
因为java中的int型占用4个字节,也就是32个二进制位。对于移位运算如果你移动了32位,那么所有的位都移出了,就没什么意义了,所以系统会先将移动的位数对32取模。
已解决问题
未解决问题在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
关于二进制正负的表示:
1 求出原码。即5 的原码是 . -5 的原码 ;
2 求出反码。正数的反码与原码一致。负数的原码除最高位取反。
即:5 的反码是 . -5 的反码 ;
3 求出补码。正数的补码与反码、原码一致。负数的补码是反码加1。
即:5 的补码是 .
-5的补码是 .
举个列子:
给原码求补码:
原码取反 (除符号位)
给补码求原码
补码码 - 1
反码取反 (除符号位)
现在求一下byte的范围。
正数最大值应该是
。补码、反码 和原码都一样。
对应的十进制数是2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 127
负数最小值是 。
A 移位运算符
包括:“&& 右移”:左边的空出的所有位数根据移位前原来的内容,原来为0就补0,原来为1就补1;
“&& 左移(左移移位,右边补零)”;
“&&& 无符号右移(高位填充0)”
其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
其结果与 -5*2*2*2 完全相同。
其结果与 5/(2*2*2) 完全相同。
其结果与 5*2*2*2 完全相同。
无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,
比如 -5&&32=-5、-5&&32=-5、-5&&&32=-5。
一个有趣的现象是,把 1 左移 31 位再右移 31 位,其结果为 -1。
B 位逻辑运算符
包括: & 与;| 或;~ 非(也叫做求反);^ 异或 ;
“& 与”、“| 或”、“~ 非”是基本逻辑运算,由此可以演变出“与非”、“或非”、
“与或非”复合逻辑运算。“^ 异或”是一种特殊的逻辑运算,对它求反可以得到“同或”,
所以“同或”逻辑也叫“异或非”逻辑。
0 收藏&&|&&1
你可能感兴趣的文章
1 收藏,552
2 收藏,259
分享到微博?
我要该,理由是:博客分类:
java位运算符包括
&(与)&&&&&& AND
|(或)&&&&&& OR
^(异或)&&&& XOR
~(非)&&&&&& NOT
位移运算符包括
&&(右移)
&&(左移)
&&&(右移,左边空出的位以0填充)
顾名思义,位运算符用于位运算,那就只能对整型或者字符型进行运算。而除了~(非)是一元运算符之外其他的都为二元运算符。
所有位运算都会把值转为二进制进行运算
&(与)
& 运算规则:0&0=0&& 0&1=0& 1&0=0&& 1&1=1
& 即:两位同时为1时,结果为1,否则为0
int a=(3&5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));
&& 结果打印为
&&&&& 1
&&&& 011
&&&& 101
&&& 解析:3的二进制为011,5的二进制为101,与操作结果为001。转为十进制是1。
|(或)
&&&&& 运算规则: 0|0=0&& 0|1=1& 1|0=1&& 1|1=1
&&&& 即:参加运算的两个对象只要有一个为1,其结果就为1
int a=(3|5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));
&& 结果打印为
&&&& 7
&&& 011
&&& 101
&&& 解析:3的二进制位011,5的二进制位101。或操作结果为111。转为10进制为7
^(异或)
&&& 运算规则:1^0=0&& 0^1=1&& 1^0=1&& 1^1=0
&&&&&&&& 即:参加运算的两个对象,如果两个个相应位为“异”(值不同),则该位结果为1,否则为0
int a=(3^5);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(5));
&&& 结果打印为
&&&&&&&&& 6
&&&&&& 011
&&&&&& 101
&&& 解析:3的二进制位011,5的二进制位101。或操作结果为110。转为10进制为6
~(非)
&&& 运算规则:~1=0&& ~0=1&&&&&&&&&
&&&&&&& 即:对一个二进制数按位取反,即0变为1,1变为0
&&& ~运算符的优先级比算数运算符、关系运算符、逻辑运算符和其他运算符都高
&&(左移)
&&& 将一个运算符对象的各二进制位全部左移诺干位(左边的二进制位丢弃,右边补0)
&&&& 操作数每左移一位,相当于该数乘以2
&&&
int a=(3&&2);
System.out.println(a);
System.out.println(Integer.toBinaryString(3));
System.out.println(Integer.toBinaryString(12));
&&& 结果打印为
&&&&&&&& 12
&&&&&&& 11
&&&&&&& 1100
&&& 解析:此运算符的意思就是把3的二进制位全部左移两位,右边补2个0。3的二进制位11,左移两位后,右边补2个0就是转为10进制为12。
&&&& 说到底左移操作就相当于2的2次方×3。 每左移1位次方就增1
&&(右移)
将一个数的各二进制位全部右移诺干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2
int a=(9&&1);
System.out.println(a);
System.out.println(Integer.toBinaryString(9));
System.out.println(Integer.toBinaryString(4));
&&& 结果打印为
&&&&&&&& 4
&&&&&&& 1001
&&&&&&& 100
&&&&
&&& 解析:9的二进制为1001,右移1位后,左正数补0,右边丢弃。结果为 0100。转为10进制后为4。
浏览: 80658 次
来自: 北京
按位“异或”运算符 (^) 将第一操作数的每个位与第二操作数的 ...
运算规则:1^0=0
楼主能传我一份 jrex的相关jar包么 andyxuq@gm ...
感谢楼主的详解,受益匪浅,谢谢
运行出现了以下错误:
Exception in thread
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 c左移运算符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信