4.1二进制基础(文件操作)

1、 十进制和二进制的由来

2、 进制转换

什么是二进制
十进制转二进制采用短除2法
二进制怎么表示一个数
计算机为什么要用二进制

3、 位运算

运算符 运算 示例
& 与运算 6&3=2
l 或运算 6 l 3=7
^ 异或运算 6^3=5
~ 反码 ~6=-7
<< 左移 3<<2=12 322=12
>> 右移 3>>1=1 3/2=1
>>> 无符号右移 3>>>1=1 3/2=1
  • 按位与&
    两位全为1,结果才为1
    0&0=0;0&1=0;1&1=1;51&1=1
    位运算的特殊用法
    1、清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值与,结果为零。
    2、取一个数中指定位
    设X=10101110,取X的低4位,用X&00001111=00001110即可得到
    方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位
  • 按位或|
    只要有一个为1,结果就为1
    51|5, 即0011 0011|0000 0101=0011 0111,因此51|5=55
    或运算的特殊用法
    常用来对一个数据的某些位 置1
    方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为0。此数与X相或可是X中的某些位 置1.
    将X=1010 0000的低4位 置1,用X|0000 1111=1010 1111即可得到
  • 按位异或^
    两个相应位为 异(值不同),则该位结果为1,否则为0
    00=0;01=1;51^5,即0011 0011^0000 0101=0011 0110,因此51^5=54
    异或运算的特殊用途
    1、使特定位翻转找一个数,对应X要翻转的各位,概述的对应位为1,其余位为0,此数与X对应位异或即可。
    X=1010 110,
    2、保留原值
    X^0000 0000=1010 1110
    两个变量交换值的方法
    1、借助第三个变量来实现
    C=A;A=B;B=C;
    2、利用加减法实现两个变量的交换
    A=A+B;B=A-B;A=A-B;
    3、用位异或运算来实现,也是效率最高
    原理:利用一个数异或本身等于0和异或运算符合交换律
    A=AB;B=AB;A=A^B;
  • 取反运算~
    对一个二进制数按位取反,即将0变1,1变0
    1=0;0=1;
  • 左移运算<<
    将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
    2<<1=4;
    若左移是舍弃的高维不包含1,则每左移一位,相当于该数乘以2
    11(1011)<<2=44
  • 右移运算符>>
    将一个数的各二进制位全部右移若干位,整数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2
    4>>2=1
    -14(1111 0010)>>2=-4(1111 1100)
  • 无符号右移运算>>>
    各个位向右移 指定的位数。右移后左边空出来的位用零来填充。移出右边的位被丢弃
    -14>>>2
    负数以正值的补码形式表示
    原码:
    一个整数按照绝对值大小转换的二进制数称为原码
    例:00000000 00000000 00000000 00001110是14的原码
    反码:
    将二进制数按位取反,所得的新二进制数称为原二进制数的反码
    补码:
    反码加1称为补码
    例:
    -14(11111111 11111111 11111111 11110010)<<2=
    (11111111 11111111 11111111 11001000)=?
    分析:只需要该补码的原码对应的正值,然后取相反数
    1、补码减1得到反码(11000111)
    2、补码取反得到原码(即该负数的正值)(00111000)
    3、计算正值
    4、取相反数

4 、 JDK内置的进制转换

public class RadixMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //十进制转为其他进制
        System.out.println(Integer.toBinaryString(112));//二进制
        System.out.println(Integer.toHexString(112));//十六进制
        System.out.println(Integer.toOctalString(112));//八进制
//其他进制转化为十进制
        System.out.println(Integer.parseInt("111001",2));//二进制
        System.out.println(Integer.parseInt("27",8));//八进制
        System.out.println(Integer.parseInt("A8",16));//十六进制
    }

}

5、 java中的进制

java中数据类型
基本类型四种

  • int数据类型:byte(8bit,-128~127)、short(16bit)、int(32bit)、long(64bit)
  • float数据类型:单精度(32bit float)、双精度(64bit double)
  • boolean类型变量的取值有:true、false
  • char数据类型有:unicode字符,16位

对应的类型:
Integer、Float、Boolean、Character、Double、Short、Byte、Long
数据类型 转换 字节

Paste_Image.png
  • 大小端
    小端法(Little-Endian)
    低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端
    大端法(Big-Endian)
    高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端
    例:
    32bit宽的数0*12 34 56 78
Paste_Image.png

字符串->字节数组
String s;byte[] bs=s.getBytes();
字节数组->字符串
byte[] bs=new byte[int];
String s=new String(bs);或
String s=new String(bs,encode);//encode指编码方式“gb2312,utf-8”

package sometime;
    /*
     * int转化为byte[]
     */
public class Convert {
    public static byte[] int2Bytes(int id){
        byte[] arr=new byte[4];
        arr[0]=(byte) ((byte)(int)(id>>0*8)&0xff);
        arr[1]=(byte) ((byte)(int)(id>>1*8)&0xff);
        arr[2]=(byte) ((byte)(int)(id>>2*8)&0xff);
        arr[3]=(byte) ((byte)(int)(id>>3*8)&0xff);
        return arr;
    }
    /*
     * 转化 byte[]为int
     */
    public static int bytes2Int(byte[] arr){
        int rs0=(int)((arr[0]&0xff)<<0*8);
        int rs1=(int)((arr[1]&0xff)<<1*8);
        int rs2=(int)((arr[2]&0xff)<<2*8);
        int rs3=(int)((arr[3]&0xff)<<2*8);
        return rs0+rs1+rs2+rs3;
    }
    public static void main(String[] args){
        // TODO Auto-generated method stub
        byte[] arr=Convert.int2Bytes(8143);
        System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);
        System.out.println(Convert.bytes2Int(arr));
        }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容