Java 有符号和java 无符号byte按位操作的区别

&& 与 &&& 位操作符有什么区别?
20Java_gannbare]
&& 与 &&& 位操作符有什么区别?
20Java_gannbare]
发布时间: 1:53:52
编辑:www.fx114.net
本篇文章主要介绍了"&& 与 &&& 位操作符有什么区别?
20Java_gannbare]",主要涉及到&& 与 &&& 位操作符有什么区别?
20Java_gannbare]方面的内容,对于&& 与 &&& 位操作符有什么区别?
20Java_gannbare]感兴趣的同学可以参考一下。
&&&好象都没有怎么用到。如果是负数&&&&和&&&的结果是不一样的,区别在最高位的设置移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(&&)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(&&)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(&&&),它使用了“零扩展”:无论正负,都在高位插入0。
http://topic.csdn.net/t//4592722.html(&&)“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入种1。
(&&&)“无符号”右移位运算符,它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。引用&3&楼&liwenso&的回复:(&&)“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入种1。
&(&&&)“无符号”右移位运算符,它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
应该是了能举个小例子吗?最高位&正负数有区别&&:有符号右移位运算符,使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入种1。&
&&&:无符号右移位运算符,它使用了“零扩展”:无论正负,都在高位插入0。
再给个小例子,其实你可以自己写下的:
public&class&SimpleTest&{
public&static&void&main(String[]&args)&{
int&value=16,value2=-16;
System.out.println(value+"有符号右移两位的值:"+(value&&2));
System.out.println(value2+"有符号右移两位的值:"+(value2&&2));
System.out.println(value+"无符号右移两位的值:"+(value&&&2));
System.out.println(value2+"无符号右移两位的值:"+(value2&&&2));
运行结果:
16有符号右移两位的值:4
-16有符号右移两位的值:-4
16无符号右移两位的值:4
-16无符号右移两位的值:
分析:可见,对于正数来说,这两个运算符是没有区别的,但是对负数来说,差别很大;这主要体现在右移后的最高位上补的是1或0,你可以自己再把二进制值打印出来看下&&是算数右移,&&&是逻辑右移
对于一个二进制数来说,第一位是它的符号位,正数为0,负数为1
算数右移时高位填充符号位,保证符号不变,而逻辑右移时高位填充0
对于左移则没有区别,无论是&&还是&&&都在低位填充0
具体举例#7给出了充其量所有的&&&&&和&&&&
只有一种情况有区别。
负数右移。
是吧?有符号跟无符号的区别引用&2&楼&gardner2010&的回复:移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(&&&&)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(&&)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(&&&),它使用了“零扩展”:无论正负,都在高位插入0。
http://topic.csdn.net/t//4592722.html
正解学习了学了一个新东西,以前还不知道哦&&&
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:java中的有符号,无符号操作以及DataInputStream
我的图书馆
java中的有符号,无符号操作以及DataInputStream
255=1*2^7+1*2^6+.....=2^n-1
1011-1111-1-0-1-1-1-128-1-1=-210-128JavaJava
Java&&&javashortint
1int toUnsigned(short s) {&
2&&&&return s & 0x0FFFF;&
1System.out.println(0x80);//128 &&
2//0x81int(32)0&
3System.out.println(0x81);//129 &&
4System.out.println(0x8001);//32769&
5System.out.println(0x);// &&
6//0xint(32)1&
7System.out.println(0x);//-&
8//0xLlong640&
9System.out.println(0xL);//&
11System.out.println(0x);//-&
12//32Llong&
13System.out.println(0x0000L);//-477
0x1cafebabelongintJavaintlonglongint
0xcafebabe32long0xffffffffcafebabeL0xLint32-1321
0& 0x ffffffffcafebabeL+0x 0000L-----------------------------&0x cafebabeL
0x1cafebabe“L”long
(即如果符号位为110char
bytebyte-1char181161charintcharint65535
0xffjavaintffjava100...ff.
“”int“”“0x33”intlong“L”“0xL”
&,已经是位,最高位是符号位
位的,最高位已经是0,相当于0X0000ffff
charccharshortchar
falsebyte(byte)0x90int0x90Java
byteintintbytebyteint010000(byte)0x90int-112int0x90+144
Javabyteint0xff
javabyteint0xff
&public static String bytes2HexString(byte[] b) {& String ret = "";& for (int i = 0; i & b. i++) {&& String hex = Integer.toHexString(b[i] & 0xFF);&& if (hex.length() == 1) {&&& hex = '0' +&& }&& ret += hex.toUpperCase();& }& &}byte[],b[i] & 0xFFbyte 0xFF,Integer.toHexString,b[i] & 0xFFint, 0xFF? Integer.toHexString(b[i]);,byteint?.
:1.byte8bitsint32bits2.java
byte88018 1 -1 127 -128
Integer.toHexStringint&0xffbyteintint32byte8-1int10xffffffff0xff240
0xffjavaintffjava100...ff.
DataInputStream
DataInputStream in = new DataInputStream(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new BufferedInputStream(fileInputStream));
TA的最新馆藏[转]&随笔- 131&
&&&&&&&&&&&&&
&1&.在了解位移之前,先了解一下正数和负数的二进制表示形式以及关系:举例15和-15:15 的原码: 00
&&& 补码: 11 &&&&&&&&&&&&&&&& +1 = -15的原码:11 负数的原码即为:正数的原码取反,再加1。&2&位移操作:(只针对 int类型的数据有效,java中,一个int的长度始终是32位,也就是4个字节,它操作的都是该整数的二进制数).也可以作用于以下类型,即 byte,short,char,long(当然,它们都是整数形式)。当为这四种类型是,JVM先把它们转换成int型再进行操作。&&&&&& 左移&& &&&&&& 右移&&&&&& 无符号右移&& 和&&为数值位移,&&&为逻辑位移。【注】:Java中不存在&&&。$1& m&&n的含义:把整数m表示的二进制数左移n位,高位移出n位都舍弃,低位补0.& (此时将会出现正数变成负数的形式)实例:& 3&&2剖析:& 3二进制形式: 00 ,按照$1的原理,得到00 ,即为12. & & 左移使整数变为负数:& & 二进制表示形式:11 ,按照$1的原理,得到10 ,即为:-.$2& m&&n的含义:把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1.实 例: & 3&&2剖析:& 3二进制形式: 00 ,按照$2的原理,得到00 ,即为0.& -3&&2剖析:& -3二进制形式: 11 ,按照$2的原理,得到11 ,即为-1.以上:每 个整数表示的二进制都是32位的,如果右移32位和右移0位的效果是一样的。依次类推,右移32的倍数位都一样。备注:对于右移32位与右移0位是结果是一样的,我一直不能够理解。现在我只能理解为32比较特殊。相当于整体全移。与移0位相同。左移也是一样的。$3& m&&&n:整数m表示的二进制右移n位,不论正负数,高位都补零。实例: & 3&&&2剖析:& 3二进制形式: 00 ,按照$3的原理,得到00 ,即为0.& -3&&&2剖析:& -3二进制形式: 11 ,按照$3的原理,得到11 ,即为.&& 【注】:对于$1,$2,$3,如果n为负数:这时JVM会先让n对32取模,变成一个绝对值小于32的负数,然后再加上32,直到 n 变成一个正数。实例:&& 4&&-10&& 4的二进制形式:00 对32取模再加上32,不用说了,得到22,则4&&-10,即相当于4&&22。&& 此时按照再按照$1原理,得到00 ,得到的即为:。OK, 大功告成。综上所述:&& m&&n即在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方.&& m&&n即相当于m除以2的n次方,得到的为整数时,即为结果。如果结果为小数,此时会出现两种情况:(1)如果m为正数,得到的商会无条件 的舍弃小数位;(2)如果m为负数,舍弃小数部分,然后把整数部分加+1得到位移后的值。 ---------------------------------------------------------------------------------接 下来在此说说位操作的好处,速度超快,这些都是底层的二进制机器操作指令。& 比如:a*2,&&&&&& 1.jvm先为变量a分配空间;&&&&&& 2.再进行a*2的操作;&&&&& 3.再把结果返回给相应的变量。而 a&&1,和a*2一样,它只需要一条指令即可,速度很快。当然前三种位移操作都是对2的倍数进行操作时可用。再 进行些许补充,谈到位操作,当然还要说到四个操作符:~(按位非),|(按位或),&(按位与),^(按位异或),这些都是大学 计算机基础用法,对整数的二进制形式进行操作,然后再转换为整数,具体操作如下。1.~(按位非):【解义】对该整数的二进制形 式逐位取反。&&& ~4:(一元操作符)&&&& 4的二进制形式为:00 ,逐位取反后得到:11 ,即为-5.2.| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1等。&&& 4|-5:&&&& 4的二进制形式为:00 ,&&& -5的二进制形式为:11 ,& 逐位进行逻辑或运算:11 ,即得到-1.3.&(按位与):【解义】对两个整数的二进制形式逐位进行逻辑与 运算,原理:1|0=0,0|0=0,1&1=1;0&1=0等。& && 4&-5:&&&& 4的二进制形式为:00 ,&&& -5的二进制形式为:11 ,& 逐位进行逻辑与运算:00 ,即得到0.&&
实际应用:可以把字节转换为整 数,-64&0xFF=192,也可以用八进制的形式,-64&、
其实0xFF和0377都表示的是整数255、 4.^(按 位异或):【解义】对两个整数的二进制形式逐位进行逻辑异或运算,原理:1^1=0,1^0=1,0^1=1,0^0=0.&& 4^-5:&&&& 4的二进制形式为:00 ,&&& -5的二进制形式为:11 ,逐位进行逻辑异或运算:11 ,即得到-1.
实际应用:按位异或可以比较两个数字是否相等,它利用 1^1=0,0^0=0的原理。& 20^20==0
转自:/blog/615658
关于二进制一些说明:
关于负数的二进制表示方法
今天知道了对于负数的二进制方法的表示方法:例如 -5&& 第一步:首先要把5变成101的二进制形式第二步:再者就是按位取反,(形 成前面全是1)010第三步:在最后加1 形成:11 反过来如果把 最高位是1的二进制变成负的整形时第一步:位取反,变成00 第二 步:在最低位加上1,形成101第三步:形成整形5 ,在加上负号;在java中怎么用代码实现二进制于十进制的转化public int binaryInToInt(String str){&&&&&&&&&&&& int j=0,i=0;&&&&&&&&&&&&&&&&&&&&&& for(i=0;i&str.length();i++)&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&& if(str.charAt(str.length()-i)=='1')&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& j=j+exp(2*ln(str.length()-i));&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& }} 转自:http://blog.csdn.net/zdp5528/archive//2278719.aspx
(1)正负表示方法用字节的最高位表示:"1"表示"正","0"表示"负"(2)计算机中数字是以哪个码储存的?补码(3) 负数 的二进制补码转换成十进制的方法1、把补码&取反&(把二进制数的各位&1&换&0&,&0&换&1&。比如&101010&取反后为&010101&)2、把取反后的二进制数&加1&3、最后用常规的方法把&加1&后的二进制数转换为十进制数
将负数转换为二进制
http://blog.csdn.net/onewalkingman/archive//3746154.aspx
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,我们仍然没有学习一个负数如何用二进制表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示? 
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
是 5的 原码。 
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00 每一位取反,得11 。
反码是相互的,所以也可称:
互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
的反码是:11 。
那么,补码为:
+ 1 = 11 所以,-5 在计算机中表达为:11 。转换为十六进制:0xFFFFFFFB。再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:1、先取1的原码:00 1 11110
2、得反码:&&&& 11
3、得补码:&&&& 11
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF个人总结:补码:反码加1称为补码。一个负二进制转为十进制例如:11 第一步:减1 变为11 (二进制,第一位不足时从第二位第一也为2)第二步:取反 00 根据常用方法转为十进制.最后要加-号关于java中的~按位非如:~1 1二进制为 00 ~1为:&&&&&&& 11 首位为1说明此数为-根据上面的计算方法,即可以计算出结果。
&posted on
阅读(...) 评论()C语言(15)
java(19)
1、与C语言不同,JAVA里没有无符号(unsigned)整型。
JAVA的8种基本类型(boolean,byte,short,char,int,long,float,double)都是有符号的。
2、与C语言不同,JAVA里的char类型,占2个字节,专为存放Unicode字符所设计;
3、与C语言不同,JAVA里的boolean只能赋值为true或false,不能直接赋&#;
4、与C语言不同,JAVA里的long类型,不是占4字节,而是占8字节。
JAVA与C的不同之处,还有很多:
JAVA中没有指针,其实引用就是指针,但不能进行加减,也没有取值(*)和取地址(&)。
JAVA中有垃圾回收机制,不需要自己释放空间;只管new,不需要delete。
JAVA中的基本类型所占内存宽度是固定的,而C里可能跟平台相关。
JAVA中没有预处理指令。(如C中的#define , #include , #ifdef等)。
JAVA中没有GOTO,但可以break或continue到指定的标签。
JAVA中没有const关键字,而是用static final来定义常量。
JAVA中没有全局变量,却有静态(static)变量。
JAVA中不支持struct和union的类型。
JAVA中不支持可变参数列表。
JAVA中没有BitField的功能。
JAVA中没有typedef的功能。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:61021次
积分:1177
积分:1177
排名:千里之外
原创:37篇
转载:145篇
(2)(13)(5)(6)(7)(11)(7)(7)(3)(15)(15)(8)(5)(6)(6)(9)(41)(16)

我要回帖

更多关于 java 找不到符号 的文章

 

随机推荐