1. 單片機的進制的換算
用在單片機上的一般就是16進制和2進制,這兩者之間的換算非常簡單,看下面兩個例子:
234H轉為2進制:
2 == 0010
3 == 0011
4 == 0100
234H = 0010 0011 0100 B
1101000101001B轉為16進制:
從低位開始四位四位的劃,到最高位則左邊補0,如上數:
1101000101001B = 0001 1010 0010 1001 B
然後直接轉為16進制即可:
0001 1010 0010 1001 B == 1A29H
2. 單片機中能直接識別的是幾進制數.該進制的數有什麼特點
單片機中能直接識別的就是二進制數,不論是指令還是數據,都是二進制數。
所謂的十六進制,是人為的寫成的,把4位二進制數寫成一位十六進制數,目的是便於讀/寫,但在單片機內部可不存在什麼十六進制數。
至於特點,就是0,1兩個數,這樣,正好利用電子路線的截止和導通兩個狀態來表示0,1,注意,只是表示0,1兩個數,其實,0,1這兩個數也根本不存的。只是人為的表示罷了。
3. 單片機十六進制如何轉成二進制數
單片機十六進制和二進制數,不用轉換,計算機內的數據都是以二進制保存的。幾進制數,只是以不同的方式來顯示。本質上是一樣的。
如果一定要轉換,具體參考如下:
unsigned char num; //定義一個8位數
if(num&(1<<n))
...;//num 的第N位是1
else
...;//num 的第N位是0
當然可以放在一個循環裡面;
for(unsigned char i=0;i<8;i++) {
if(num&(1<<n))
...;//num 的第N位是1
else
...;//num 的第N位是0
}
4. 請問單片機C語言編程中那些進制數是什麼意思啊 下面舉例:
首先,你應該知道0x40是十六進制數吧。其次,計算機裡面的數據以二進制存儲也不用多說了。
使用十六進制數有不同的作用。
首先,十六進制的數也是一個數字,可以進行數字運算,比如0x40+0x40=0x80。
其次,十六進制和二進制的轉換十分密切。在單片機中,對寄存器的操作是一個十分重要的內容(什麼是寄存器?不知道的話說明你單片機還沒入門,趕緊網路去吧),有些寄存器就像是一個開關。假設有一個寄存器叫SWITCH(我編的名字,意思是開關),它有八位,作用是八個燈的開關。如果第一位是1,則把第一盞燈打開,第二位是1,就打開第三盞,依此類推。如果我想把第一三盞燈打開,我就需要給SWITCH賦值 10100000,第一位和第三位是1,打開,其他是0,關閉。這樣就相當於一個語句 SWITCH = 10100000。但是10100000太長了,如果改成16進制數,就是0xA0,那麼,這個語句也可以寫成 SWITCH = 0xA0。這就是用十六進制的好處。
那麼,怎麼知道用什麼數據呢?你就得知道某個寄存器每一位的作用。在你的單片機對應的手冊里,會對每一個寄存器的作用做詳細的解釋。去看看操作手冊,你就知道賦值是什麼用了。
最後,用windows自帶的計算器軟體裡面的 程序員 模式(查看——程序員),能方便地實現各個進制的轉換。
用單片機不少時間啦~給你一點點幫助~
5. 單片機的十六進制怎麼表示
十六進制 是計算機中數據的一種表示方法.同我們日常中的十進製表示法不一樣.它由0-9,A-F,組成.與10進制的對應關系是:0-9對應0-9;A-F對應10-15;N進制的數可以用0---(N-1)的數表示超過9的用字母A-F。 例如: 10進制的32表示成16進制就是:20 16進制的32表示成10進制就是:3×16^1+2×16^0=50 6.1 為什麼需要八進制和十六進制? 編程中,我們常用的還是10進制……畢竟C/C++是高級語言。 比如: int a = 100,b = 99; 不過,由於數據在計算機中的表示,最終以二進制的形式存在,所以有時候使用二進制,可以更直觀地解決問題。 但,二進制數太長了。比如int 類型佔用4個位元組,32位。比如100,用int類型的二進制數表達將是: 0000 0000 0000 0000 0110 0100 面對這么長的數進行思考或操作,沒有人會喜歡。因此,C,C++ 沒有提供在代碼直接寫二進制數的方法。 用16進制或8進制可以解決這個問題。因為,進制越大,數的表達長度也就越短。不過,為什麼偏偏是16或8進制,而不其它的,諸如9或20進制呢? 2、8、16,分別是2的1次方,3次方,4次方。這一點使得三種進制之間可以非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。在下面的關於進制轉換的課程中,你可以發現這一點。 6.2 二、八、十六進制數轉換到十進制數 6.2.1 二進制數轉換為十進制數 二進制數第0位的權值是2的0次方,第1位的權值是2的1次方…… 所以,設有一個二進制數:101100100,轉換為10進制為:356
6. 單片機進制運算的迷惑
單片機運算是二進制。不管是char還是int本質都是二進制,只是長度和補碼的區別而已。
二進制機器碼和二進制運算還是有點區別的,樓上的概念略有混淆。
7. 單片機中二進制怎麼表示
單片機編程 匯編中 十進制 後面加D ,十六進制後邊加H, 二進制後面加B。 比如 10進制 35D, 16進制 23H, 二進制 0010 0011B.
c語言中 十進制 不加前綴, 十六進制前邊加 0x , 8進制前邊加0 , 二進制不能直接表示(比較麻煩), 如 10進制 15 , 16進制 0x25 , 8進制 025
8. 51單片機c語言編程中的數字是幾進制的
默認是十進制的。如果hour=03。03是十進制3。十進制十六進制其實是對人來說的,是你寫程序的時候區分的,如果我用串口發送十進制數30 hour=sbuf 單片機中hour=?寄存器中存貯的是0001 1110。如果我寫hour++ hour是用十進制還是十六進制規則運算,這個在內存裡面就是該變數位置二進制的加1,如果說在程序裡面十進制和十六進制++,感覺差別不大。
9. 單片機編程中都是16進製表示數字么 會不會有10進制或2進制
看編程語言
匯編中有16進制 有10 進制有8進制 有2進制
c語言中無2進制的使用 我是說語法中
各有各的好處
inta=0;//c語言中
a=0xff;//16進制
a=0377;//8進制以0開頭
a=255;//10進制
//他們表示數據是一個數
10. 51單片機C語言里 怎樣將16進制 直接化成 10進制
我這兒有一個進制轉換的程序,你可以參考一下:
#include<stdio.h>
#include<math.h>
#include<string.h>
int count=0;
void *tentoBOH(int a,int n)
{
int t,i=0,j,str[50],*p;
char str1[50],*q,temp;
while(a!=0)
{
t=a%n;
if(n==16)
{
if(t<=9&&t>=0)str1[i++]=(char)('0'+t);
if(t>9&&t<16)str1[i++]=(char)('A'-10+t);
}
else
str[i++]=t;
a=a/n;
count++;
}
for(i=0,j=count-1;i<count/2;i++,j--)
{
t=str[i];
str[i]=str[j];
str[j]=t;
temp=str1[i];
str1[i]=str1[j];
str1[j]=temp;
}
if(n==16)
return q=str1;
else
return p=str;
}
int BOHtoTen(char str[],int n)
{
int len,i,a=0;
char t;
len=(int)strlen(str);
for(i=0;i<len/2;i++)
{
t=str[i];
str[i]=str[len-1-i];
str[len-1-i]=t;
}
i=0;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
a+=(str[i]-'0')*(int)pow(n,i);
if(str[i]>='a'&&str[i]<='f')
a+=(str[i]-'a'+10)*(int)pow(n,i);
if(str[i]>='A'&&str[i]<='F')
a+=(str[i]-'A'+10)*(int)pow(n,i);
i++;
}
return a;
}
void main()
{
int a,i,n,m,*p;
char *q,str[20];
printf("請輸入一個十進制數a= ");
scanf("%d",&a);
printf("請輸入一個進制數n= ");
scanf("%d",&n);
if(n==16)q=tentoBOH(a,n);
else p=tentoBOH(a,n);
printf("輸出正整數%d的%d進制為:",a,n);
if(n==16)
for(i=0;i<count;i++)
printf("%c",*(q+i));
else
for(i=0;i<count;i++)
printf("%d",*(p+i));
printf("\n請輸入字元串str= ");
scanf("%s",str);
printf("\n請輸入該字元串的進制m= ");
scanf("%d",&m);
printf("\n該%d進制數%s轉換成十進制數為:%d\n",m,str,BOHtoTen(str,m));
}