Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 14:34   #1
Tuff_Gnarl
 
Регистрация: 25.11.2012
Сообщений: 3
По умолчанию CPP, перевод целого числа в двоичное

ребят обЪясните пожалуйста как это работает, особенно не понятно:
Код:
 w[i]=((a>>i)&1);
Код:
#include<iostream>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int main ()
{
  int r,a,i,w[32];

  printf("Введите десятичное число: "); scanf("%d",&a);
  for(i=0;i<32;i++) w[i]=((a>>i)&1);
  cout<<"\n×èñëî "<<a<<"в двоичной системе счисления: ";
  for(i=31,r=0;i>=0;i--){
    if((w[i]==1)||(r==1)){
      printf("%d",w[i]);
      r=1;
    }
  }
 getch();
 return 0 ;
}
Tuff_Gnarl вне форума Ответить с цитированием
Старый 13.12.2012, 15:12   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,711
По умолчанию

Цитата:
особенно не понятно
что не понятного? берется число побитно и все...
p51x вне форума Ответить с цитированием
Старый 13.12.2012, 15:26   #3
Tuff_Gnarl
 
Регистрация: 25.11.2012
Сообщений: 3
По умолчанию

Код:
for(i=31,r=0;i>=0;i--){
    if((w[i]==1)||(r==1)){
      printf("%d",w[i]);
      r=1;
    }
  }
а что происходит тут?
Tuff_Gnarl вне форума Ответить с цитированием
Старый 13.12.2012, 15:46   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вывод значений w[i]. Нулевые значения пропускаются до первого ненулевого, для этого используется служебная переменная r.
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 15:57   #5
Tuff_Gnarl
 
Регистрация: 25.11.2012
Сообщений: 3
По умолчанию

Спасибо огромное!
вот еще вопросик:
Код:
#include <cstdlib>
#include <iostream>

using namespace std;



    void printi(int n)
{
            int i;
 
            if( n < 0 )
            {  
                putchar( '-' ); 
                n = -n;  
                 }
        if( i = n / 2 )
        printi( i );
            i = n % 2 ;
            putchar( i >= 10 ? 'A' + i - 10 : '0' + i );
}
 
int main()
{
         int n;
         for(int g=0;g<3;g++)
         {
                         scanf("%d",&n);
                         cout<<"V 2-chnoi sisteme ischisleni9\n";
                         printi(n);
                         cout<<"\n";
                         }
    system("PAUSE");
    return EXIT_SUCCESS;
}
не понятно как происходит вывод.. какой параметр что означает, помогите пожалуйста:
Код:
putchar( i >= 10 ? 'A' + i - 10 : '0' + i );
Tuff_Gnarl вне форума Ответить с цитированием
Старый 13.12.2012, 16:09   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

putchar(c) - вывод символа c.
?: - тернарный оператор. a?b:c имеет значение b, если a не равно 0 ("истинно") и c в противном случае.
'A' - символьный литерал, числовая константа, равная коду символа A. '0', аналогично, символьный литерал, равный коду символа 0.

Сводя всё вместе, строка означает: "вывести на экран символ с кодом, при i>=10 равным коду символа A плюс i минус 10, а при i<10 равным коду символа 0 плюс i".
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 16:31   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,711
По умолчанию

Телепатя будущий вопрос: "Нафига так?" Тут используется то, что в таблице символов буквы и цифры идут друг за другом. Поэтому,
Цитата:
при i<10 равным коду символа 0 плюс i
фактически может вывести цифры 0-9
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод числа из десятичного представления в двоичное на Си Kastet14 Помощь студентам 11 29.04.2016 16:49
Программа выдает двоичное представление целого числа в компьютере (на C) MooNDeaR Помощь студентам 5 06.08.2011 14:08
Перевод целого числа из 5 в 8 систему счисления и обратно. Whitt Помощь студентам 7 08.09.2010 07:14
не работает перевод из целого числа в ASCII professor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.06.2010 06:59
C++. Перевод десятичного числа в двоичное Panterka Помощь студентам 15 12.12.2007 15:04