C語言 十進位制轉二進位制,並儲存在陣列中
阿新 • • 發佈:2018-11-12
#include <stdio.h> #define uint unsigned int #define ushort unsigned short uint transform_data(uint frequence,ushort* pwm_table) { uint temp = frequence; int pwm_index = 0; while(temp) { pwm_table[pwm_index] = (temp&0x01); temp = temp>>1; pwm_index++; } return pwm_index; } int main(){ uint frequence = 2; //scanf("%d",&frequence); ushort pwm_table[15] = {0}; uint off_set; off_set = transform_data(frequence,pwm_table); int i=0; for(i=off_set-1;i>=0;i--) { printf("%d",pwm_table[i]); } return 0; } //輸出結果:10
以前寫的時候,總是想著要對2取餘,再除2,今天看到別人寫的程式,才想起來,直接取他的最低位,然後右移就是除2。(~o ̄3 ̄)~
》————————————————————————————————————————————————《
上次寫的只能轉換正數,現在又把負數加上去了,感覺程式寫的太繁瑣了,有沒有更簡單的方法。
#include <stdio.h> #define uint unsigned int #define ushort unsigned short //求2的N次方 int cifang(int n) { int i = 0,sum = 1; for(i = n;i>0;i--) { sum *= 2; } return sum; } //十進位制正數轉換成二進位制數 uint transform_data_zhengshu(uint frequence,ushort* pwm_table) { uint temp = frequence; int pwm_index = 0; while(temp) { pwm_table[pwm_index] = (temp&0x01); temp = temp>>1; pwm_index++; } return pwm_index-1; } uint transform_data(int frequence,ushort* pwm_table) { int temp = frequence; int pwm_index = 0; ushort pwm_temp[15]={0}; //負數 if(frequence<0) { //先將負數轉換成正數 temp = -frequence; //求出這個正數temp的二進位制並存放在pwm_temp中 transform_data_zhengshu(temp,pwm_temp); //將這個正數temp的二進位制pwm_temp取反並轉換成十進位制數 sum int sum = 0; int i = 0; for(i = 0;i < 15;i++) { if(pwm_temp[i]==0) pwm_temp[i]=1; else pwm_temp[i]=0; sum += cifang(i)*pwm_temp[i]; pwm_temp[i] = 0; } //將轉換出來的十進位制數sum加一 sum += 1; //printf("sum=%d\n",sum); //最後再轉成二進位制pwm_table return transform_data_zhengshu(sum,pwm_table); } //正數 return transform_data_zhengshu(frequence,pwm_table); } int main(){ int frequence = -2; //scanf("%d",&frequence); ushort pwm_table[15] = {0}; uint off_set; off_set = transform_data(frequence,pwm_table); int i=0; for(i=off_set;i>=0;i--) { printf("%d",pwm_table[i]); } return 0; }