有關數字轉二進制算法
可以用手刻的方式算出二進制的值
#include <stdio.h>
int main (void){
char data[]="0";
int i , n ;
printf("enter a number to conversion bit value:\n");
scanf("%d",&n);
for(i = 3; i >=0; i--){
if(n%2 == 0){
data[i]='0';
}
else if(n == 1){
data[i]='1';
data[i-1]='1';
i--;
break;
}
else{
data[i]='1';
}
n = n/2;
}
while(i>=0){
data[i]='0';
i = i-1;
}
printf("the number of bit value: \n");
printf("%s\n",data);
}
目前以上程式只能輸入數字計算出二進制的值
假如我今天也想可以同時讀取數字與文字 A B C D E等字串,也轉為二進制4 bit的方式顯示出的話
該怎麼做比較好
各位不好意思,沒有搞清楚名詞就發問
也謝謝各位大大,小的我去把一些bit與byte的名詞與作用區別去study過了
簡單來說我想把文數字轉成二進位制去轉換為對應 4 bit 的文數字 value
大概像是這樣
如果我想不使用array的對應方式拆解的話,有什麼方法可以完成呢?
如果急著要把英文字母轉成二進位
就 Google 「C 二進位」
如果沒那麼急,就找一本C的書
靜下心來,耐著性子,慢慢讀完
之所以這麼回答
以下是幾點原因:
1.標題是「8位元/8byte」,你寫的是「轉2進位」,程式執行結果也只有「4位元」
2.程式能處理的最大值是 15,16之後就錯了
3.標題是「C++」,你寫的是「C」
位元 = bit
8位元 = 8 bits , 也就是 1 byte
4位元 = 4 bits , 也就是 1 nibble
1 個 byte = 2 nibble, 可以分為 Hi_Nibble, Lo_Nibble.
1 nibble 可以用 16進位 1碼來表示.
所以 1 byte 可以用 16進位 2碼來表示.
https://en.wikipedia.org/wiki/Bit
https://en.wikipedia.org/wiki/Nibble
https://en.wikipedia.org/wiki/Byte
建議靜下心來,先去圖書館借些書,逐步的練習.
阿~~ 被發現沒有做功課了
感謝各位提點,對bit byte有比較有概念了
文章有修改過,再麻煩指點
雖然問題解決,我還是提供一些參考的寫法
暴力查表範例
#include <stdio.h>
int main(void)
{
int n;
//暴力查表法
const char* data[16]={
"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111",
};
//這邊不做錯誤檢查,假設使用者只會輸入一個 0~9 or a~f or A~F
printf("enter a number to conversion 8 bit value:\n");
scanf("%x", &n); // %x 允許 16 進位數字
printf("the number of 8 bit value:\n");
printf("%s\n", data[n]);
return 0;
}
位元運算範例
#include <stdio.h>
int main(void)
{
int i, n;
char data[5];
//這邊不做錯誤檢查,假設使用者只會輸入一個 0~9, a~f, A~F
printf("enter a number to conversion 8 bit value:\n");
scanf("%x", &n); // %x 允許 16 進位數字
//利用位元運算轉換數值為二進位字串
for(i=0; i<4; ++i) {
data[i] = n & 1 << 3 - i ? '1' : '0';
}
data[4] = '\0';
printf("the number of 8 bit value:\n");
printf("%s\n", data);
return 0;
}