[問題] C考古題
32-bit machine用C語言對位址 0x00005000 的第三個bit設成0, 第五個bit設成1。
請問他的"第3個"是從高位元算(00100000)還是(00000100)
這有牽涉到big Endian嗎?
等等等,我confused了。
我原本以為
1.我只要把0x00005000當一個數字,不用管題目裡的"位址"的意思
2.0x00005000是32bits,所以"第5個bit設成1"應該是 0x08000000
所以我的code長這樣
unsigned int addr=0X00005000;
addr&=0XDFFFFFFF; //1101
addr|=0X08000000; //0000 1000
printf("0X%08X",addr);
所以我重申一下我的問題
除了原來的問題
1.第3bit到底從高位還是低位算
2.題目中"位址"的意義?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.75.167
→
03/21 13:36, , 1F
03/21 13:36, 1F
※ 編輯: fakewen 來自: 111.248.75.167 (03/21 14:22)
→
03/21 15:09, , 2F
03/21 15:09, 2F
→
03/21 15:17, , 3F
03/21 15:17, 3F
→
03/21 15:30, , 4F
03/21 15:30, 4F
這樣不會怪怪的嗎?
(*addr).bit[3] = 0; (*addr).bit[5] = 1;拿分?= =
※ 編輯: fakewen 來自: 111.248.75.167 (03/21 16:39)
推
03/21 17:02, , 5F
03/21 17:02, 5F
已修改THX
→
03/21 17:08, , 6F
03/21 17:08, 6F
→
03/21 17:12, , 7F
03/21 17:12, 7F
推
03/21 17:25, , 8F
03/21 17:25, 8F
→
03/21 17:26, , 9F
03/21 17:26, 9F
※ 編輯: fakewen 來自: 111.248.75.167 (03/21 17:44)
推
03/21 22:09, , 10F
03/21 22:09, 10F
這行我執行不會過ㄟ 就算換成
unsigned int a=0x00005000;
int val =*a;
也不會過compile
→
03/21 22:11, , 11F
03/21 22:11, 11F
→
03/21 22:11, , 12F
03/21 22:11, 12F
→
03/21 22:12, , 13F
03/21 22:12, 13F
※ 編輯: fakewen 來自: 111.248.75.167 (03/21 23:03)
→
03/21 23:14, , 14F
03/21 23:14, 14F
推
03/21 23:23, , 15F
03/21 23:23, 15F
→
03/21 23:24, , 16F
03/21 23:24, 16F
→
03/21 23:46, , 17F
03/21 23:46, 17F
感謝大大,我大概懂了,你先宣告了一個uint再用他的位址,降不會有error
但如果我直接*(0x00005000)就有可能會錯誤存取!
還有幫你抓一下,你bit位置算錯了,1U已經在第1bit上了
還有~似乎也放錯位置了,應該要降
*pAddr&=~(1U<<2) , *pAddr|=(1U<<4);
※ 編輯: fakewen 來自: 111.248.75.167 (03/22 04:01)
→
03/22 07:10, , 18F
03/22 07:10, 18F
推
03/22 09:57, , 19F
03/22 09:57, 19F
→
03/22 09:57, , 20F
03/22 09:57, 20F
→
03/22 09:57, , 21F
03/22 09:57, 21F