當前位置:首頁 » 編程語言 » c語言之間的數字轉換
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言之間的數字轉換

發布時間: 2023-02-26 16:49:31

c語言中的轉換

計算機中常用的數的進制主要有:二進制、八進制、十六進制,學習計算機要對其有所了解。
2進制,用兩個阿拉伯數字:0、1;
8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進制,用十個阿拉伯數字:0到9;
16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。 以下簡介各種進制之間的轉換方法:
一、二進制轉換十進制
例:二進制 「1101100」
1101100 ←二進制數
6543210 ←排位方法 例如二進制換算十進制的演算法:
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
說明:2代表進制,後面的數是次方(從右往左數,以0開始)
=64+32+0+8+4+0+0
=108 二、二進制換算八進制
例:二進制的「10110111011」
換八進制時,從右到左,三位一組,不夠補0,即成了:
010 110 111 011
然後每組中的3個數分別對應4、2、1的狀態,然後將為狀態為1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
結果為:2673 三、二進制轉換十六進制
十六進制換二進制的方法也類似,只要每組4位,分別對應8、4、2、1就行了,如分解為:
0101 1011 1011
運算為:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由於10為A,所以11即B)
1011 = 8+2+1 = 11(由於10為A,所以11即B)
結果為:5BB 四、二進制數轉換為十進制數
二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……
所以,設有一個二進制數:0110 0100,轉換為10進制為:
計算: 0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 五、八進制數轉換為十進制數
八進制就是逢8進1。
八進制數採用 0~7這八數來表達一個數。
八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……
所以,設有一個八進制數:1507,轉換為十進制為:
計算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
結果是,八進制數 1507 轉換成十進制數為 839 六、十六進制轉換十進制
例:2AF5換算成10進制
直接計算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997
(別忘了,在上面的計算中,A表示10,而F表示15)、 現在可以看出,所有進制換算成10進制,關鍵在於各自的權值不同。
假設有人問你,十進數 1234 為什麼是 一千二百三十四?你盡可以給他這么一個算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 十進制與二進制轉換之相互演算法
十進制轉二進制: 用2輾轉相除至結果為1 將余數和最後的1從下向上倒序寫 就是結果 例如302 302/2 = 151 餘0 151/2 = 75 餘1 75/2 = 37 餘1 37/2 = 18 餘1 18/2 = 9 餘0 9/2 = 4 餘1 4/2 = 2 餘0 2/2 = 1 餘0 故二進制為100101110 二進制轉十進制 從最後一位開始算,依次列為第0、1、2...位 第n位的數(0或1)乘以2的n次方 得到的結果相加就是答案 例如:01101011.轉十進制: 第0位:1乘2的0次方=1 1乘2的1次方=2 0乘2的2次方=0 1乘2的3次方=8 0乘2的4次方=0 1乘2的5次方=32 1乘2的6次方=64 0乘2的7次方=0 然後:1+2+0 +8+0+32+64+0=107. 二進制01101011=十進制107. 一、二進制數轉換成十進制數 由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。 二、十進制數轉換為二進制數 十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。 1. 十進制整數轉換為二進制整數 十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。 2.十進制小數轉換為二進制小數 十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。 然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。 1.二進制與十進制的轉換 (1)二進制轉十進制<BR>方法:"按權展開求和" 例: (1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 =(8+0+2+1+0+0.25)10 =(11.25)10 (2)十進制轉二進制 · 十進制整數轉二進制數:"除以2取余,逆序輸出" 例: (89)10=(1011001)2 2 89 2 44 …… 1 2 22 …… 0 2 11 …… 0 2 5 …… 1 2 2 …… 1 2 1 …… 0 0 …… 1 · 十進制小數轉二進制數:"乘以2取整,順序輸出" 例: (0.625)10= (0.101)2 0.625 X 2 1.25 X 2 0.5 X 2 1.0 2.八進制與二進制的轉換 例:將八進制的37.416轉換成二進制數: 37 . 4 1 6 011 111 .100 001 110 即:(37.416)8 =(11111.10000111)2 例:將二進制的10110.0011 轉換成八進制: 0 1 0 1 1 0 . 0 0 1 1 0 0 2 6 . 1 4 即:(10110.011)2 =(26.14)8 3.十六進制與二進制的轉換<BR>例:將十六進制數5DF.9 轉換成二進制: 5 D F . 9 0101 1101 1111.1001 即:(5DF.9)16 =(10111011111.1001)2 例:將二進制數1100001.111 轉換成十六進制: 0110 0001 . 1110 6 1 . E 即:(1100001.111)2 =(61.E)16

Ⅱ c語言數字和字元的相互轉換

#include "stdio.h"

#include "math.h"

main()

{

char change(int x,int n);

int x,i,j;

char s[8],y;

printf("請輸入整數:");

scanf("%d",&x);

for(i=0;i<20;i++)

{

y=change(x,i);

if(y=='')

{

s[i]='';

break;

}

s[i]=y;

}

for(i=7;i>=0;i--)//由於字元存儲到字元數組時順序與原來相反,故在此將字元順序倒輸

if(s[i]=='')

for(j=i-1;j>=0;j--)

printf("%c",s[j]);

printf(" ");

}

char change(int x,int n)

{

int i;

char g;

for(i=0;i<=n;i++)

{

switch(x%10)

{

case 0 :g='0';break;

case 1 :g='1';break;

case 2 :g='2';break;

case 3 :g='3';break;

case 4 :g='4';break;

case 5 :g='5';break;

case 6 :g='6';break;

case 7 :g='7';break;

case 8 :g='8';break;

case 9 :g='9';break;

}

if(x==0)

{

g='';

break;

}

x=x/10;

}

return(g);

}

在C/C++語言中沒有專門的字元串變數

通常用字元數組來存放字元串。字元串是以「」作為結束符。C/C++提供了豐富的字元串處理函數,下面列出了幾個最常用的函數。

字元串是面試的重點考查部分的相關知識,通過考查字元串的相關知識可以考察程序員的編程規范以及編程習慣。並且其中包括了許多知識點,例如內存越界、指針與數組操作等。許多公司在面試時會要求應聘者寫一段復制字元串或字元串子串操作的程序。本章列舉了一些與字元串相關的面試題,有些題目要求較高的編程技巧。

以上內容參考:網路-字元串

Ⅲ C語言交換兩個數字的代碼

首先要捋順一下,先看第一段程序。這段程序的目的就是為了將兩個變數的數值進行交換。此時要明白指針的使用方法,這里的交換函數是void swap(int &x, int &y),即無返回值的函數,函數傳遞的參數是int &x和int &y,這兩個東西是什麼呢?這兩個東西是定義的引用,而這個我們就可以理解為是兩個用來存儲傳遞進來的參數的地址的變數(這么說可能有點亂,其實就是將調用該函數是時傳遞進來的變數的地址給這兩個參數),所以如果在這個swap函數中對這兩個參數操作時,實際上就是對傳遞進來的那兩個變數進行操作。至於你問的關於整型的問題,這個也很好理解,在c語言里地址就是整型的,而這兩個變數定義的時候也是int整型的,所以無論是地址還是值都是整型的,而又因為*a和*b是一個指針指向的值,所以*a、*b是整型,而&a、&b是指針的地址,所以也是整型。

接下來看你第二段程序(你自己寫的這個):
看程序前請仔細查看關於函數方面的資料,至於你這個return為什麼是錯的這個問題其實很簡單,首先要了解一個函數的定義,定義函數簡單的可以分為有返回值和無返回值的,有返回值的定義類似這樣
int abc();
float bcd();
如上所示,函數名什麼的都好理解,函數名前面的"int"和"float"是指函數返回的類型,即你這個函數在執行完之後需要用return語句返回一個值,而這個返回類型就是指這個返回值的類型。
還有一種是不需要返回值的,即
void abc();
void cde();
這類函數在執行完成後不需在最後添加return語句來返回值,如果添加了也用不了。
而你寫的這個函數定義的是
int swap(int x,inty)
這里聲明的是一個需要返回整型變數的函數,而這個函數里你的返回值語句return後沒有跟任何變數或值,程序不知道你返回的是什麼東西,所以會報錯,這里一般都會填寫return 0;表示程序執行完成。當然這個0也可以換成整型的變數。

最後說一下你這個程序,你這個程序在執行完成後是不會將需要交換的變數a和b的值進行交換的。這個關繫到形參和實參的概念,請仔細查看書籍或看一些例子,你這個只是將形參的值交換了,真正的需要交換的值不會改變,也就是說你只是將a和b的兩個值復制了一份,然後將復制了的那個交換了,當swap函數完成後又將復制了的那份刪除掉了,所以說,不管怎樣最初的a和b都沒有受到任何影響。

Ⅳ C語言字元轉換為數字

#include<stdio.h>
#include<string.h>
intstr2int(char*ch);//字元型數字轉整型數字
intp10(intm);//計算10的次方,pow函數計算10次方有誤差,重寫函數
intmain()
{
charch[]="234";
intn;
n=str2int(ch);
printf("n=%d ",n);
return0;
}
intstr2int(char*ch)
{
intlen=strlen(ch),i,n=0,m=0;
for(i=len-1;i>=0;i--)
{
n=n+(ch[i]-'0')*p10(m++);
}
returnn;
}
intp10(intm)
{
inti,sum=1;
if(m==0)
return1;
for(i=0;i<m;i++)
sum=sum*10;
returnsum;
}

Ⅳ C語言中如何將數字變成字元串啊

C語言提供了幾個標准庫函數,可以將任意類型(整型、長整型、浮點型等)的數字轉換為字元串。用itoa()函數將整數轉換為字元串。

itoa()函數有3個參數:第一個參數是要轉換的數字,第二個參數是要寫入轉換結果的目標字元串,第三個參數是轉移數字時所用的基數。在上例中,轉換基數為10。

#include <stdio.h>

int main()

{

int a[4]={1,2,3,4};

char b[4];

for(int i=0;i<4;i++)

b[i]=a[i];

for(int i=0;i<4;i++)

printf("%c",b[i]);

return 0;

}

字元串在存儲上類似字元數組

它每一位單個元素都是能提取的,字元串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入數組。

通常以串的整體作為操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。

兩個字元串相等的充要條件是:長度相等,並且各個對應位置上的字元都相等。設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。

以上內容參考:網路-字元串

Ⅵ C語言如何把一個字元串轉換成數字

C語言中,可以使用atoi函數將字元串轉換為數字,如atoi("123")可以得到數字123。

atoi (表示 ascii to integer)是把字元串轉換成整型數的一個函數,應用在計算機程序和辦公軟體中。int atoi(const char *nptr) 函數會掃描參數 nptr字元串,會跳過前面的空白字元(例如空格,tab縮進)等。

如果 nptr不能轉換成 int 或者 nptr為空字元串,那麼將返回0。特別注意,該函數要求被轉換的字元串是按十進制數理解的。atoi輸入的字元串對應數字存在大小限制(與int類型大小有關),若其過大可能報錯-1。

(6)c語言之間的數字轉換擴展閱讀:

C語言中數字轉化為字元串的方案:

使用sprintf函數來實現,如sprintf("%d", 123)可以得到字元串"123"。

sprintf指的是字元串格式化命令,主要功能是把格式化的數據寫入某個字元串中。sprintf 是個變參函數。使用sprintf 對於寫入buffer的字元數是沒有限制的,這就存在了buffer溢出的可能性。解決這個問題,可以考慮使用 snprintf函數,該函數可對寫入字元數做出限制。

Ⅶ c語言編程字母數字轉換問題

#include<stdio.h>
#defineN50
charchar2int(charch){//轉換函數
charr;
switch(ch){
case'A':
case'B':
case'C':r='2';break;//為了減少結果的判斷,直接將數字轉換成數字字元
case'D':
case'E':
case'F':r='3';break;
case'G':
case'H':
case'I':r='4';break;
case'J':
case'K':
case'L':r='5';break;
case'M':
case'N':
case'O':r='6';break;
case'P':
case'R':
case'S':r='7';break;
case'T':
case'U':
case'V':r='8';break;
case'W':
case'X':
case'Y':r='9';break;
default:r=ch;//不用轉換的,原樣返回
}
returnr;
}
intmain()
{
chararr[N],b[N];
inti=0;

scanf("%s",&arr);//輸入字串
while(arr[i]!=''&&arr[i]!='#'){//
b[i]=char2int(arr[i]);//抄到結果字串
++i;
}
b[i]='';//結果字串補結束符,不然輸出可能會有亂碼
printf("%s ",b);
return0;
}