&0xff的作用

来源:互联网 发布:ubuntu怎么改变中文 编辑:程序博客网 时间:2024/04/29 20:12

举个简单的例子:

byte[]  b = new byte[5];

b[0] = -12;

byte   8位二进制   =   1个字节    char   2个字节   short (2个字节)    int(4个字节) long(8个字节) float  (4个字节) double(8个字节)

计算机存储数据机制:正数存储的二进制原码,负数存储的是二进制的补码。  补码是负数的绝对值反码加1。

比如-12,-12 的绝对值原码是:0000 1100  取反: 1111 0011  加1:  1111 0100

byte --> int   就是由8位变 32 位 高24位全部补1: 1111 1111 1111 1111 1111 1111 1111 0100 ;

0xFF 是计算机十六进制的表示: 0x就是代表十六进制,A B C D E F  分别代表10 11 12 13 14 15   F就是15  一个F 代表4位二进制:可以看做 是   8  4  2  1。

0xFF的二进制表示就是:1111 1111。   高24位补0:0000 0000 0000 0000 0000 0000 1111 1111;

-12的补码与0xFF 进行与(&)操作  最后就是0000 0000 0000 0000 0000 0000 1111 0100 

转换为十进制就是 244。

byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性。

当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样。这样做的目的就是为了保证二进制数据的一致性。

有人问为什么上面的式子中b[0]不是8位而是32位,因为当系统检测到byte可能会转化成int或者说byte与int类型进行运算的时候,就会将byte的内存空间高位补1(也就是按符号位补位)扩充到32位,再参与运算。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 唱歌咬字不清楚怎么办 宝宝肋骨凹陷怎么办 大人口齿不清怎么办 月宝宝拉肚子怎么办 生理性腹泻怎么办 小孩突然叫不出怎么办 说不清楚话怎么办 说话不利索怎么办 宝宝拉肚子呕吐怎么办 小孩磕巴怎么办 宝宝受凉拉稀怎么办 小儿呕吐腹泻怎么办 小孩发热呕吐怎么办 小孩子发烧呕吐怎么办 孩子吐怎么办? 一岁半宝宝拉肚子怎么办 小儿腹胀便秘怎么办 小儿腹胀腹泻怎么办 月子宝宝腹胀怎么办 2周岁拉肚子怎么办 小孩受凉拉肚子怎么办 儿童发烧呕吐怎么办 宝宝呕吐发烧怎么办 幼儿腹胀呕吐怎么办 儿童腹胀呕吐怎么办 孩子着凉呕吐怎么办 孩子一直吐怎么办 小孩一直呕吐怎么办 小宝宝有点拉稀怎么办 宝宝突然拉稀怎么办 十岁儿子拉肚子怎么办 儿童呕吐拉肚子怎么办 宝宝一吃就吐怎么办 小孩子呕吐拉肚子怎么办 婴幼儿呕吐怎么办 小孩夜里呕吐怎么办 小孩肠胃炎呕吐怎么办 儿童轻微拉肚子怎么办 三岁半宝宝呕吐怎么办 宝宝腹泻呕吐怎么办 儿童呕吐腹泻怎么办