[問題] byte跟bitset的問題
最近要寫二進位轉十進位遇到很多問題
剛開始bitwise還不怎麼會 = =
一開始我是想說
因為int是4個byte
int i,mask = 0x80000000
for(i=1;i<=32;i++)
{
if(mask & value)
printf("1");
else
printf("0");
mask>>=1;
if(i%8==0) // 八個bit空一個分開來比較好觀察
printf(" ");
}
結果這樣輸入數字只會有2 4 8 16 等二的次方的結果(00000001 00000011 00000111..)
其他像輸入介於4~8的數字就都是輸出4的結果
輸入8~16的數字就都是輸出8的結果
然後只要一輸入128就會全部變成1111111111111111111111111111111
後來爬了一下板看到有一篇在講把一個整數的四個byte分開來存的方法
所以就想說會不會要用指標從第一個byte指到第二個byte這樣分開來
然後我又去試著去改改看
{
int mask = 0x80;
int i,j;
char *p;
p = (char*)&u.intvalue;
for(i=1;i<=4;i++)
{
for(j=1;j<=8;j++)
{
if(mask & *p)
printf("1");
else
printf("0");
mask>>=1;
}
printf(" ");
p++;
}
}
我想說分成四個byte 然後8個bit 8個bit去test
可是這樣出來的結果 譬如說我輸入8 就會變成
00001000 00000000 00000000 00000000
跟我一開始想要的 00000000 00000000 00000000 00001000 不一樣
而且如果我輸入256 就會轉成 00000000 00000000 00000000 00000000
輸入257就會跟輸入1一樣顯示00000001 00000000 00000000 00000000
我想問的是為什麼第一個方法不行
然後為什麼第二個方法裡00001000會跑到最前面 跟為什麼我這樣寫
一輸入256就會變回0
對不起敘述很爛
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.102.131
→
01/03 21:08, , 1F
01/03 21:08, 1F
→
01/03 21:08, , 2F
01/03 21:08, 2F
→
01/03 21:09, , 3F
01/03 21:09, 3F
→
01/03 21:11, , 4F
01/03 21:11, 4F
→
01/03 21:13, , 5F
01/03 21:13, 5F
→
01/03 21:13, , 6F
01/03 21:13, 6F
→
01/03 21:15, , 7F
01/03 21:15, 7F
→
01/03 21:18, , 8F
01/03 21:18, 8F
→
01/03 21:23, , 9F
01/03 21:23, 9F
→
01/03 21:23, , 10F
01/03 21:23, 10F
→
01/03 21:25, , 11F
01/03 21:25, 11F
→
01/03 21:26, , 12F
01/03 21:26, 12F
→
01/03 21:26, , 13F
01/03 21:26, 13F
→
01/03 21:29, , 14F
01/03 21:29, 14F
→
01/03 21:38, , 15F
01/03 21:38, 15F
→
01/03 21:39, , 16F
01/03 21:39, 16F
→
01/03 21:39, , 17F
01/03 21:39, 17F
→
01/03 21:47, , 18F
01/03 21:47, 18F
→
01/03 21:50, , 19F
01/03 21:50, 19F
→
01/03 21:53, , 20F
01/03 21:53, 20F
推
01/03 21:57, , 21F
01/03 21:57, 21F
→
01/03 21:58, , 22F
01/03 21:58, 22F
→
01/03 21:59, , 23F
01/03 21:59, 23F
→
01/03 22:00, , 24F
01/03 22:00, 24F
→
01/03 22:01, , 25F
01/03 22:01, 25F
→
01/03 22:02, , 26F
01/03 22:02, 26F
→
01/03 22:02, , 27F
01/03 22:02, 27F
→
01/03 22:26, , 28F
01/03 22:26, 28F
推
01/03 22:29, , 29F
01/03 22:29, 29F
→
01/03 22:37, , 30F
01/03 22:37, 30F
推
01/03 23:22, , 31F
01/03 23:22, 31F
→
01/03 23:23, , 32F
01/03 23:23, 32F
→
01/03 23:27, , 33F
01/03 23:27, 33F
推
01/05 00:36, , 34F
01/05 00:36, 34F
推
01/05 00:40, , 35F
01/05 00:40, 35F
推
01/05 01:50, , 36F
01/05 01:50, 36F
推
01/05 23:49, , 37F
01/05 23:49, 37F