[問題] endian

看板C_and_CPP作者 (noOneKnows)時間14年前 (2012/02/02 00:13), 編輯推噓4(4014)
留言18則, 11人參與, 最新討論串1/4 (看更多)
大家好,我來求教 關於 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

02/02 00:15, , 1F
0x00 0x04 跟 0x04 0x00,不是0x40 0x04
02/02 00:15, 1F

02/02 00:16, , 2F
但上次看到另一篇文章說這樣可能會錯←可以找出這篇嗎?
02/02 00:16, 2F

02/02 00:20, , 3F
取餘數幹嘛不用 a%16
02/02 00:20, 3F

02/02 00:30, , 4F
在同一個平台的話endian不會不一樣
02/02 00:30, 4F

02/02 00:34, , 5F
Endian是CPU level的東西?! 0x1234好像是編譯器的東西?!
02/02 00:34, 5F

02/02 00:34, , 6F
在 C/C++ 語言裡面,原始碼的 4 跟 0x4 只是不同的進位
02/02 00:34, 6F

02/02 00:35, , 7F
endian 是 CPU 跟記憶體如何存取資料,你不需要考慮
02/02 00:35, 7F

02/02 00:35, , 8F
說實在,不是很肯定,但真的如果是數值運算不用這樣寫 ...
02/02 00:35, 8F

02/02 00:37, , 9F
p 大解決了我的疑惑,寫0xFFFF跟65535是完全一樣的?!
02/02 00:37, 9F

02/02 00:38, , 10F
用bitwise也不用考慮嗎?
02/02 00:38, 10F

02/02 00:40, , 11F
bitwise只需考慮長度是否一樣 及 signed bit.
02/02 00:40, 11F

02/02 00:41, , 12F
了解!
02/02 00:41, 12F

02/02 00:45, , 13F
找了一下,不知j大是否指的是這篇 : #1EbSpQa6
02/02 00:45, 13F

02/02 00:58, , 14F
寫網路通訊或emulator都需要考慮endian啊
02/02 00:58, 14F

02/02 03:46, , 15F
因為那些是跨平台的東西呀...
02/02 03:46, 15F

02/02 09:14, , 16F
如果是要用bit operation來做可以用 x & (16 - 1)
02/02 09:14, 16F

02/02 09:15, , 17F
然後把16換成你想要除的~這樣應該是不用考慮endian的問題
02/02 09:15, 17F

02/02 12:15, , 18F
t大說bitwise不用考慮endian那應該直接給0x也ok吧
02/02 12:15, 18F
文章代碼(AID): #1FAMJ0OM (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 4 篇):
問題
1
7
問題
4
18
文章代碼(AID): #1FAMJ0OM (C_and_CPP)