Re: [問題] 負數處理
※ 引述《dabiddabid (dabid')》之銘言:
: 小弟要將兩個Int16數字組成Int32
: Int16 a = -30 ;//1111 1111 1110 0010
: Int16 b = -19456 ; //1011 0100 0000 0000
: 現在想把ab組合在一起成Int32(ab)//1111 1111 1110 0010 1011 0100 0000 0000
: 原本是想將兩個都先ToInt32將a << 16 然後(a | b)
: 但現在發現負數Int16轉Int32會將前面全部補1
: b會變成1111 1111 1111 1111 1011 0100 0000 0000
: 但我想要的是0000 0000 0000 0000 1011 0100 0000 0000
: 也就是想要a|b結果是-1920000//11111111111000101011010000000000
: 但實際現在結果卻是-19456 //11111111111111111011010000000000
: 請問這要如何解決?
因為你沒有指定是Big Endian還是Little Endian
按照你給的範例直接使用預設的Little Endian來轉換
Int16 a = -30;
var a_bits = new BitArray(BitConverter.GetBytes(a));
string a_bitsString = "";
for (int i = 0; i < a_bits.Count; i++)
a_bitsString += a_bits[i] ? "1" : "0";
Console.WriteLine(a_bitsString);
輸出後結果為a = 0100 0111 1111 1111 與你文中指出的順序是顛倒的
所以你使用的應該是Big Endian
然後按照你文中的要求感覺就是將兩個數字的bytes組合起來
那程式碼應該是如下
Int16 a = -30;
Int16 b = -19456;
List<byte> temp = new List<byte>();
temp.AddRange(BitConverter.GetBytes(a));
temp.AddRange(BitConverter.GetBytes(b));
int c = BitConverter.ToInt32(temp.ToArray(), 0);
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.114.250
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1460466596.A.D43.html
推
04/12 21:48, , 1F
04/12 21:48, 1F
→
04/12 21:49, , 2F
04/12 21:49, 2F
※ 編輯: m339606 (36.232.114.250), 04/12/2016 21:53:43
推
04/12 22:14, , 3F
04/12 22:14, 3F
→
04/12 22:15, , 4F
04/12 22:15, 4F
→
04/18 09:21, , 5F
04/18 09:21, 5F
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章