C:int a[4]
 
 
java: int [4] a
 
 

 
 
 int是4个字节,假设一个int的4个字节是abcd,转为byte数组byte[4]。则存为b[0]=a,b[1]=b,b[2]=c,b[3]=d
 
 
 
 
 
 另外注意:类型转换的原则是值不变,所以000a转为byte是a,a000转成byte无法转成a。
 
 
 如果从char转为usigned char 。可能值会变。当大小一样时,转的时候原则是保持内存内容不变,因为此时不需要补也不需要删(需要补或者删的时候就好考虑使得值不变)。char转为 usigned char时告诉系统第一位不再是符号位,也是值位。int和unsigned int 也是,互转不会溢出
 
 
 ----------------------一下引至网友----------
 
 
unsigned 就是第一个符号位也用来作为数据的保存位, 
  
int ---》 unsigned int,如果是负数的话,由于第一个是符号位1,所以转换之后的结果就和原来的数不一样了。 
  如果是整数,原来的符号位是0,结果没有变化 
  unsigned int ---> int ,同上考虑 
 
 ----------------------------------------------
 public static byte[] intToByteArray1(int i) {  
   
   
 
 byte[] result = new byte[4];    
 
 
 
 //必须把我们要的值弄到最低位去,有人说不移位这样做也可以, 
  & 0xFF000000); 
  
 //,这样虽然把第一个字节取出来了,但是若直接转换为byte类型,会超出byte的界限,出现error。再提下数//之间转换的原则(不管两种类型的字节大小是否一样,原则是不改变值,内存内容可能会变,比如int转为//float肯定会变)所以此时的int转为byte会越界,只有int的前三个字节都为0的时候转byte才不会越界。虽//然 
   & 0xFF000000);  
   这样不行,但是我们可以这样 
   & //0xFF000000)  
   >>24); 
   
 
   
 result[2] = (byte)((i >> 8) & 0xFF);  
   
 
   
 
   
 } 
    
 
   
 public static int byteArrayToInt(byte[] b, int offset) { 
    
      
    
      
    
          
    
          
    
      
    
      
    
} 
    
 
   
 
    
 
   
关于byteArrayToInt有必要再写一种
 
   
 public static int byteArrayToInt(byte[] b, int offset) { 
    
      
    
      
   

     value|=b[i]; 
   
 
   
value=value<<8; 
    
      
    
      
    
}





以下是C语言:



先说个上次看到的运算符:~按位取反,^按位异或



关于位移运算符还得说明:



<<左移,这没啥好说的,右边补0



>>右移,(左边在java中,正数补0,负数补1)



应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。






-1的8位补码表示是1111 1111,此时如果是补1的系统,则移任意次值不会变还是-1






整数比特反转


reverse(int   m)  
    
 { 
   
 int result=0;
 
   
 int tmp=0;
 
   
 //while(m){//这里要看是那种编译系统,有的编译系统负数向右移位操作左边补1,这时候这里就会有问题了,最终是移为-1的。
 
   
for(int i=0;i<8;i++){
 
   
 int tmp=m&1;//取m的最低位看是0还是1
 
   
 result|=tmp;
 
   
 result<<1;
 
   
                                                
 
   
 }
 
   
 }