看板 C_and_CPP 關於我們 聯絡資訊
大家好,我來求教 關於 endian 我原本的理解是,在 C++ 拿到的整數值就是一般課本介紹的方式。 比如說 short int a = 4 就一定會是 0x04 而不會是 0x40。 只有在記憶體中才可能依照機器而有不同的實際排列,maybe 0x04, 0x40, 0x20, 0x02... 所以如果我今天要取出 a 除以 16 的餘數。 假設 a > 0 就是 a & 0x0F,而不是 a & 0xF0 或其他的 因為似乎網路上有些文章也是這樣寫,但上次看到另一篇文章說這樣可能會錯? 他說程式中拿到的值並沒有規定一定最左邊 MSB、最右邊LSB由小到大。 所以在寫 bit operation 要考慮 endian, 因為從沒遇過這種情形,也查不到, 所以上來求教是否高階程式語言看到的值真的不一定是如此? 抱歉程式沒學很好,請求賜教,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.143.3
Bencrie:0x00 0x04 跟 0x04 0x00,不是0x40 0x04 02/02 00:15
james732:但上次看到另一篇文章說這樣可能會錯←可以找出這篇嗎? 02/02 00:16
littleshan:取餘數幹嘛不用 a%16 02/02 00:20
L0v35:在同一個平台的話endian不會不一樣 02/02 00:30
meconin:Endian是CPU level的東西?! 0x1234好像是編譯器的東西?! 02/02 00:34
purpose:在 C/C++ 語言裡面,原始碼的 4 跟 0x4 只是不同的進位 02/02 00:34
purpose:endian 是 CPU 跟記憶體如何存取資料,你不需要考慮 02/02 00:35
meconin:說實在,不是很肯定,但真的如果是數值運算不用這樣寫 ... 02/02 00:35
meconin:p 大解決了我的疑惑,寫0xFFFF跟65535是完全一樣的?! 02/02 00:37
diabloevagto:用bitwise也不用考慮嗎? 02/02 00:38
tropical72:bitwise只需考慮長度是否一樣 及 signed bit. 02/02 00:40
diabloevagto:了解! 02/02 00:41
tropical72:找了一下,不知j大是否指的是這篇 : #1EbSpQa6 02/02 00:45
hilorrk:寫網路通訊或emulator都需要考慮endian啊 02/02 00:58
firejox:因為那些是跨平台的東西呀... 02/02 03:46
thinklu:如果是要用bit operation來做可以用 x & (16 - 1) 02/02 09:14
thinklu:然後把16換成你想要除的~這樣應該是不用考慮endian的問題 02/02 09:15
diabloevagto:t大說bitwise不用考慮endian那應該直接給0x也ok吧 02/02 12:15