C語(yǔ)言每日練習(xí)之進(jìn)制轉(zhuǎn)換
分析
我一開(kāi)始的想法是通過(guò)輸入整數(shù)形式八進(jìn)制來(lái)轉(zhuǎn)換成十進(jìn)制輸出,后來(lái)發(fā)現(xiàn)用字符數(shù)組輸入更方便。我這里就講講我用整型數(shù)據(jù)輸入的轉(zhuǎn)換思路:
我們都知道二進(jìn)制由0和1組成,3位二進(jìn)制組成在一起,就可以表示0-7這八個(gè)數(shù),所以八進(jìn)制實(shí)際上就是3位二進(jìn)制的組合(同理十六進(jìn)制是4位二進(jìn)制的組合),C語(yǔ)言的位運(yùn)算操作的是二進(jìn)制,算術(shù)運(yùn)算針對(duì)的是十進(jìn)制,所以,我們可以通過(guò)位運(yùn)算求出八進(jìn)制的每一位數(shù)(3位二進(jìn)制為1位),然后通過(guò)算術(shù)運(yùn)算符+,將他們加起來(lái)。和十進(jìn)制運(yùn)算不同的地方在于一個(gè)兩位的十進(jìn)制數(shù)的十位數(shù)要乘10加上個(gè)位數(shù)即一個(gè)兩位十進(jìn)制數(shù),而八進(jìn)制的兩位數(shù),高位只需要乘以8。
這題我們也可以偷個(gè)懶,讓C編譯器幫我們算,只需要三行即可實(shí)現(xiàn)轉(zhuǎn)換:
int octal_num = 0; scanf("%o", &octal_num); printf("十進(jìn)制:%d\n", octal_num);
當(dāng)然,不建議這樣做。
至于用字符數(shù)組形式輸入,那就更簡(jiǎn)單了,不用通過(guò)位運(yùn)算取出八進(jìn)制數(shù)每位數(shù),具體實(shí)現(xiàn)見(jiàn)網(wǎng)上參考部分。
代碼實(shí)現(xiàn)
#include <stdio.h> /** * @brief 八進(jìn)制轉(zhuǎn)十進(jìn)制 * @param octal_number 八進(jìn)制數(shù) * @return 十進(jìn)制數(shù) */ int Octal_to_Decimal(int octal_number) { int dec_number = 0; //十進(jìn)制返回值 int negative = 0; //負(fù)數(shù)標(biāo)志 if(octal_number < 0) //負(fù)數(shù)判斷 { octal_number = -1 * octal_number; negative = 1; } while(octal_number != 0) { //高位之和乘8再加上低3位,低3位即八進(jìn)制最低位 dec_number = dec_number * 8 + (octal_number & 0x7) ; octal_number >>= 3; //右移3位 } if(negative) return -1 * dec_number; return dec_number; } #define FIRST //使用第一種方法,注釋掉此行則使用第二種方法 int main() { int octal_num = 0; #ifdef FIRST printf("輸入一個(gè)八進(jìn)制數(shù)\n"); scanf("%o", &octal_num); printf("對(duì)應(yīng)的十進(jìn)制為%d\n", Octal_to_Decimal(octal_num)); #else /* 偷懶法 */ puts("八進(jìn)制:"); scanf("%o", &octal_num); printf("十進(jìn)制:%d\n", octal_num); #endif return 0; }
運(yùn)行結(jié)果
網(wǎng)上參考
// Created by www.runoob.com on 15/11/9. // Copyright © 2015年 菜鳥(niǎo)教程. All rights reserved. // https://www.runoob.com/cprogramming/c-exercise-example82.html #include<stdio.h> #include<stdlib.h> int main() { int n=0,i=0; char s[20]; printf("請(qǐng)輸入一個(gè)8進(jìn)制數(shù):\n"); gets(s); while(s[i]!='\0'){ n=n*8+s[i]-'0'; i++; } printf("剛輸入的8進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制為\n%d\n",n); return 0; }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
STL區(qū)間成員函數(shù)及區(qū)間算法總結(jié)
這篇文章主要匯總介紹了STL區(qū)間成員函數(shù)及區(qū)間算法,有需要的小伙伴可以參考下。2015-07-07C++類(lèi)與對(duì)象的詳細(xì)說(shuō)明
這篇文章主要為大家詳細(xì)介紹了C++的類(lèi)與對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作
這篇文章主要介紹了c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C語(yǔ)言詳解格式控制符scanf與printf的輸入輸出
這篇文章主要介紹了C語(yǔ)言格式控制符中輸入scanf()和輸出printf()的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2022-04-04淺析C++中strlen函數(shù)的使用與模擬實(shí)現(xiàn)strlen的方法
這篇文章主要介紹了strlen函數(shù)的使用與模擬實(shí)現(xiàn)strlen的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI(上)
這篇文章主要介紹了C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01