ffff(关于0xffffffff 到底是什么意思?)
一、与0xffffffffu进行与运算的目的是什么
其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式
byte是一个字节保存的,有8个位,即8个0、1。
8位的第一个位是符号位,
也就是说0000 0001代表的是数字1
1000 0000代表的就是-1
所以正数最大位0111 1111,也就是数字127
负数最大为1111 1111,也就是数字-128
上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码
1、反码:
一个数如果是正,则它的反码与原码相同;
一个数如果是负,则符号位为1,其余各位是对原码取反;
举个例子:2二进制吗为 00000010,因为是正数,所以其反码也是 00000010
如果是-2那么,就要把最高位变为1,其他7位按照其正数的位置取反。
2、补码:利用溢出,我们可以将减法变成加法:
对于十进制数,从9得到5可用减法:
9-4=5因为4+6=10,我们可以将6作为4的补数
改写为加法:
+6=15(去掉高位1,也就是减10)得到5.
对于十六进制数,从c到5可用减法:
c-7=5因为7+9=16将9作为7的补数
改写为加法:
c+9=15(去掉高位1,也就是减16)得到5.
在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1
- 1的原码为 10000001
- 1的反码为 11111110
+ 1
- 1的补码为 11111111
0的原码为 00000000
0的反码为 11111111(正零和负零的反码相同)
+1
0的补码为 100000000(舍掉打头的1,正零和负零的补码相同)
Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,
而byte只有8位这时会进行补位,例如补码11111111的十进制数为-1
转换为int时变为11111111 11111111 11111111 11111111好多1啊,呵呵!
即0xffffffff但是这个数是不对的,这种补位就会造成误差。
和0xff相与后,高24比特就会被清0了,结果就对了。
Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,
那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),
会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。
而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,
结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
0xFF(十进制1)
二进制码:00000000 00000000 00000000 11111111
与 0xff做&运算会将 byte值变成 int类型的值,也将-128~0间的负值都转成正值了。
char c=(char)-1& 0xFF;
char d=(char)-1;
System.out.println((int)c); 255
System.out.println((int)d); 65535
java中的数值是int,所以0xFF是int,而byte是有符号数,int亦然,直接由byte升为int,符号自动扩展,
而进行了& 0xFF後,就把符号问题忽略掉了,将byte以纯0/1地引用其内容,所以要0xFF,不是多馀的,
你用一些Stream读取文件的byte就知道了,我昨天搞了一天,就不明白为什麼读出来的数某些byte会
在移位後错误的,就是因为这个原因.
把number转换为二进制,只取最低的8位(bit)。因为0xff二进制就是1111 1111
&运算是,如果对应的两个bit都是1,则那个bit结果为1,否则为0.
比如 1010& 1101= 1000(二进制)
由于0xff最低的8位是1,因此number中低8位中的&之后,如果原来是1,结果还是1,原来是0,结果位还
是0.高于8位的,0xff都是0,所以无论是0还是1,结果都是0.
二、为什么我,安装的游戏是出现代码0xffffffff
或者“驱动”,或
“游戏”的程序不稳定,或者“版本太旧”,或者金山卫士+金山毒霸朋友,“软件管家”,点开!
开机后,回车,进到“安全模式”里,“高级启动选项”!(看准了再卸,别把有用的卸了)
6.再不行,重启电脑,找到多余的那款卸掉,留下“迅雷”,卸载“快车”,找到木马和病毒!建议卸掉,新的,原因总结起来,有以下方面!
(答案原创,本答案原作者,删除“可疑自启动项”和木马,开机后按“F8”,回车,看看效果如何!
7.再不行,开始菜单,多款网游等等),留下“暴风”,卸载“”:力王历史)
1.电脑中了木马或者有病毒在干扰,你安装了两款或两款以上的同类软件(如:两款播放器,两款
qq,回车,或将其升级
为“最新版本”!
4.软件冲突!
试试:杀毒软件,按下去试试,输入cmd,彻底删除!
2.如果第1种方法不行,个“360系统急救箱”,或者“金山系统急救
箱”!
先“全盘查杀”,查杀完毕,或多款浏览器,多款杀毒软件!
或者“360安全卫士”,360安全卫士+360杀毒双引擎版,第4项!
8!
5,
建议:使用“木马云查杀”和“360杀毒”,“全盘扫描”和“自定义扫描”病毒和木马,删除后,重启电脑.卸载方法:你在电脑左下角“开始”菜单里找到“强力卸载电脑上的软件”,在命令提示符下输入(复制即可):
for%1 in(%windir%;system32,点开“隔离恢复”:“”:点开,再重启电脑!如,找到:“最后一次正确配置”!
然后点开“隔离恢复”区,找到“可疑自启动项”和木马,点“彻底删除”!
再点开“修复”,“全选”,直到屏幕滚动停止为止,重启电脑,再点“修复”!
3.你的“播放器”,或“聊天软件”,或“IE浏览器”,找
到“多余”和“类似”的软件卸载!如:“播放器”,点开!它们在一起不“兼容”,
卸掉“多余”的那一款,电脑出现:内存不能为written,运行;*.dll) do regsvr32.exe/s%1
粘贴,回车!卸完了再“强力清扫”:“软件卸载”,点开
三、0xffff是什么意思
0xffff是十进制的65535,其中0x代表16进制。
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
十六进制中,个位数1-15分别为1 2 3 4 5 6 7 8 9 a b c d e f(a=10....f=15);16为十六进制值c后面1个数,由于c+1满16,需要进1位,个位数变为0,所以16的十六进制是10。
扩展资料:
C语言中十六进制数也可以通过除2取余法,得到二进制数,每个十六进制转为4个二进制,不足时在左边补零。
二进制有两个特点,它由两个数码0,1组成,二进制数运算规律是逢二进一。为区别于其它进制,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示,其中B是英文二进制Binary的首字母。