Функция для перевода цел.числа из dec в oct - C (СИ)
Формулировка задачи:
Написал функцию для перевода, вроде бы переводит, а результат не смог вывести. Укажите на ошибки. Потому что чую, что где-то накосячил сильно.
#include <stdio.h> #include <conio.h> #include <windows.h> #include <stdlib.h> #include <math.h> void d2o(int dec) { char s[]="01234567"; char oct; int i,j; if (dec==0) oct='0'; else { oct=' '; i=0; while((1<<((i+1)*3))<=dec) //8^(I + 1) i++; for(j=0; j<i; j++) { oct=oct+s[(dec>>((i-j)*3))+1]; //DEC DIV 8^(I - J) dec=dec&((1<<((i-j)*3))-1); //DEC MOD 8^(I - J) } } } int main(int argc, char* argv[]) { int z; printf("vvedi chislo: "); scanf("%d",&z); d2o(z); getch(); return 0; }
Решение задачи: «Функция для перевода цел.числа из dec в oct»
textual
Листинг программы
void dec2oct (unsigned int dec) { int k=0; char buf[12]={0}; do{ buf[k]=dec&0x07; dec>>=3;//dec/=8; k++; }while(dec); for(;k>0;k--) printf("%d",buf[k-1]); printf("\n"); }
Объяснение кода листинга программы
- Объявлена функция dec2oct, которая принимает целочисленный аргумент dec.
- Внутри функции объявлены следующие переменные:
- k, целочисленная переменная, инициализируется значением 0.
- buf, массив символов, инициализируется значением {0}.
- В цикле do-while происходит перевод десятичного числа в восьмеричное.
- В каждой итерации цикла, самый старший бит числа dec записывается в соответствующий элемент массива buf.
- Число dec сдвигается вправо на 3 бита (на 8 в десятичной системе).
- Значение переменной k увеличивается на 1.
- После окончания цикла do-while, в цикле for происходит вывод значения каждого элемента массива buf в консоль.
- Цикл начинается с k равным 1, а заканчивается, когда k меньше или равно 0.
- Каждая итерация цикла начинается с вызова функции printf с аргументом buf[k-1] (индекс элемента массива buf, уменьшенный на 1).
- В конце функции, после завершения цикла for, вызывается функция printf с аргументом
\n
, что переводит курсор на новую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д