java类型转化之int转换为byte[]

小白想请问一个问题:
java中将int转换为byte[]数组时,我参考网上的代码如下:
public byte[] int2bytes(int Num){
byte[] bytes = new byte[4];
bytes[0] = (byte)(Num & 0xff);
bytes[1] = (byte)((Num >> 8) & 0xff );
bytes[2] = (byte)((Num >> 16) & 0xff);
bytes[3] = (byte)((Num >> 24) & 0xff);
return bytes;
}


我想问的是,之后的0xff的作用到底是什么。
我的疑惑如下:
①网上的说法是:0xff的二进制第一个字节11111111,其他三个字节均是0,按位与之后,将位运算之后的int低8位之外的24位清零,可是int强制转换为byte是只取了最后的低8位吧,那么前面的是不是0是有什么关系呢。如下:
原数据int: 00000000 00101001 00001010 00010110
位运算>>8: 00000000 00000000 00101001 00001010
& 0xff : 00000000 00000000 00000000 00001010
转换byte : 00001010

按照这样的流程,如果不进行& 0xff操作,直接将位运算之后强制转换,结果应该如下:
原数据int: 00000000 00101001 00001010 00010110
位运算>>8: 00000000 00000000 00101001 00001010
转换byte : 00001010

既然网上的代码都是这样写,肯定有其中的道理,那么我的理解错误点在哪里呢?

②我将此段代码,传参-1024调用,并循环输出byte[4]的元素发现返回结果是一样的
有&0xff:0 -4 -1 -1
无&0xff:0 -4 -1 -1

还请指点,非常感谢。

更新:我后来想了下。觉得这应该是从别的语言里面借鉴过来的写法。
在java中byte的取值范围是127~-128,而int为4个byte,那么可能在位运算之后,不进行& 0xff按位与之后可能存在int的第一个字节和第二个字节均不为零的情况,那么此时int的值实际上是超过了byte的取值范围,在别的语言里可能会造成溢出。
但是,我刚试验过了。java中实际上这种转换不会抛出错误,比如直接将280转换成byte,则直接砍掉前面的14位,只取后面8位。

之后的0xff的作用就是只取最后的一个字节,相当于

bytes[1] = (byte)((Num >> 8) & 0xff );
->
bytes[1] = (byte)((Num >> 8) % 256 );
->
bytes[1] = (byte)((Num / 256) % 256);
这些都是一回事

http://m.baidu.com/from=1011267l/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1004%2Cta%40iphone_2_4.4_11_2.1/baiduid=E1E24D25789A1BF3D13A7BCDA95199D3/w=0_10_int%E5%BC%BA%E8%BD%ACbyte%E4%BC%9A%E5%BC%82%E5%B8%B8%E5%90%97/t=iphone/l=3/tc?ref=www_iphone&lid=9113330595732391645&order=6&vit=osres&tj=www_normal_6_0_10_title&m=8&srd=1&cltj=cloud_title&dict=30&title=Java%E4%B8%ADbyte%E8%BD%AC%E6%8D%A2int%E6%97%B6%E4%B8%8E0xff%E8%BF%9B%E8%A1%8C%E4%B8%8E%E8%BF%90%E7%AE%97%E7%9A%84%E5%8E%9F%E5%9B%A0_%E4%BA%92%E5%8A%A8%E7%99%BE%E7%A7%91&sec=6759&di=5f7310f9faf7abb5&bdenc=1&tch=124.233.264.1025.2.529&tch=124.180.300.989.3.1469&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IENiTNCVP28SxokDyqRLDBrVeYUTsSpm91l80-Yarhw2NhCn8
你可以多试几个值,看是否结果还是一样,由于在床上,我无法进行实验,你自己试试吧。

你去看看位操作吧。。。

主要是int是多字节数据,在java中是四个字节,所谓int转字节数组,就是顺次将int的四个字节的二进制数据按8位为单位存储成4个byte数据而已。
用0xFF相与后的结果仍然是4个字节,那么最后一个字节的数据就是byte转换后的数据,前面的3个字节就清零了。
int强制转换为byte是只取了最后的低8位,但是它是为了保证数据截断的正确,防止高位溢出的。

0xff的作用就是只取最后的一个字节