亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

以下案例為什么要將i右移后從高位開始寫入呢?不是每次從低位開始寫入嗎?

以下案例為什么要將i右移后從高位開始寫入呢?不是每次從低位開始寫入嗎?

int i = 0x7fffffff;

//用write方法每次只能寫一個字節,如果要把i寫進去就得寫4次

raf.write(i >>> 24);//高8位

raf.write(i >>> 16);

raf.write(i >>> 8);

raf.write(i);


正在回答

2 回答

java默認的編碼方式是unicode big endian,即大端存儲方式的unicode,具體數據的高位字節存放在低位地址上。關于大端模式和小端模式可以進一步百度。

0 回復 有任何疑惑可以回復我~
#1

天涯蝶舞 提問者

raf.write('A');//只寫了一個字節 System.out.println(raf.getFilePointer()); raf.write('B'); A的二進制:00000000 01000001 B的二進制:00000000 01000010 這里為什么沒有對A和B進行右移操作呢?每次寫只能寫一個字節,按照大端存儲方式那就全為0了吧?而且右移操作符應該是2個>>吧,怎么他這里有3個呢?請教!
2016-01-07 回復 有任何疑惑可以回復我~
#2

chrt 回復 天涯蝶舞 提問者

,因為這只是演示,char型占兩個字節,對'A'來說高八位沒意義,只存入低八位再取出還是可以解析成'A'。假如你要存入漢字比如說"中",就要通過移位把高八位和低八位都存入,這樣再讀取出來才能解析成"中"。>>>三個表示無符號右移
2016-01-07 回復 有任何疑惑可以回復我~
#3

天涯蝶舞 提問者

非常感謝!
2016-01-07 回復 有任何疑惑可以回復我~
#4

bryan4it

如果默認的是大端存儲,那write()應該寫入的是"A"的高8位?。???
2016-01-28 回復 有任何疑惑可以回復我~
查看1條回復

raf.write('A');//只寫了一個字節

System.out.println(raf.getFilePointer());

raf.write('B');


A的二進制:00000000 01000001

B的二進制:00000000 01000010


這里為什么沒有對A和B進行右移操作呢?每次寫只能寫一個字節,按照大端存儲方式那就全為0了吧?而且右移操作符應該是2個>>吧,怎么他這里有3個呢?請教!


0 回復 有任何疑惑可以回復我~
#1

Darkchaox

A:00000000 01000001前8bit沒有數據,所以只需保存后面01000001這8bit; 操作符參考: 移位運算符也針對二進制的“位”,它主要包括:左移位運算符(<<)、右移位運算符(>>>)、帶符號的右移位運算符(>>)。其中: 左移運算符用“<<”表示,是將運算符左邊的對象,向左移動運算符右邊指定的位數,并且在低位補零。 右移運算符用符號“>>>”表示,是將運算符左邊的對象向右移動運算符右邊指定的位數,并且在高位補 0。 帶符號的右移運算符用符號“>>”表示,是將運算符左邊的運算對象,向右移動運算符右邊指定的位數。如果是正數,在高位補零,如果是負數,則在高位補 1。
2016-03-12 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

以下案例為什么要將i右移后從高位開始寫入呢?不是每次從低位開始寫入嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號