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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2013, 21:59   #1
Agness
Новичок
Джуниор
 
Регистрация: 03.12.2013
Сообщений: 1
По умолчанию Перевод ОТРИЦАТЕЛЬНЫХ десятичных чисел в двоичные

Ребят, помогите, пожалуйста!
Каким образом перевести отрицательные десятичные числа в двоичные?
Ума не приложу. С положительными всё ясно, а вот с отрицательными...
Agness вне форума Ответить с цитированием
Старый 03.12.2013, 22:11   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Если по букве вопроса, то переводишь как обычное положительное и приписывашь знак отрицательности.

А если по смыслу... то ничего не понятно. Может что-то типа:
Код:
int	u;
int	y = 10 ;
u = (y - 1) ^ 0xffffffff;
Smogg вне форума Ответить с цитированием
Старый 03.12.2013, 22:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Каким образом перевести отрицательные десятичные числа в двоичные?
Они от положительных ничем не отличаются. Переводи как и положительные - все равно получишь набор нулей и единиц.
И я тебя разочарую - понятие отрицательного числа это всего лишь обертка. Если считать тип числа int то последний бит будет говорить отрицательное или положительно, если тип unsigned то последний бит не считается знаком а продолжает число. Так что в двоичной системе по факту нет отрицательных. Все зависит от того как программа будет воспринимать биты, не более.
I'm learning to live...

Последний раз редактировалось Stilet; 03.12.2013 в 22:21.
Stilet вне форума Ответить с цитированием
Старый 03.12.2013, 22:25   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Посмотри здесь: http://ru.wikipedia.org/wiki/Дополни...авление_числа)
type_Oleg вне форума Ответить с цитированием
Старый 05.12.2013, 12:47   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Они от положительных ничем не отличаются. Переводи как и положительные - все равно получишь набор нулей и единиц.
И я тебя разочарую - понятие отрицательного числа это всего лишь обертка. Если считать тип числа int то последний бит будет говорить отрицательное или положительно, если тип unsigned то последний бит не считается знаком а продолжает число. Так что в двоичной системе по факту нет отрицательных. Все зависит от того как программа будет воспринимать биты, не более.
Вообще то представление отрицательных чисел в компьютере отличается от обычного, например -1 в десятичной будет выглядеть как ff соотсветственно при однобайтном типе данных и это зависит не от программы, это представление идет на уровне процессора. (кажется)
Может это и чушь, но это моя чушь и я ее никому не отдам.

Последний раз редактировалось Shad0wF1rst; 05.12.2013 в 12:50.
Shad0wF1rst вне форума Ответить с цитированием
Старый 05.12.2013, 21:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, но это все равно двоичное представление. Просто инвертированное. Перевод того же -1 общепринятыми методиками как раз и даст FF а не что-то другое, что ожидает автор. Короче я хочу сказать что и отрицательные и положительные переводятся в бинарку одинаково.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2013, 00:37   #7
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>



// 10 to 2
char* dec_to_bin(char* d, int n) {
   char* t = d;
   unsigned u = (unsigned)n;
   for(unsigned i = u; i != 0; i >>= 1)
        ++d;
   *d = '\0';
   for(--d; u != 0; u >>= 1)
        *d-- = (u & 1) + '0';
   return t;
}



// 2 to 10
int bin_to_dec(const char* b) {
    unsigned n = 0u;
    while(*b) {
        n |= (*b - '0');
        if(*(++b))
            n <<= 1;
    }
    return (int)n;
}




int main(void){
    char b[33];
    int  n;

    n = -0xFFFF;
    printf("src: %d\n", n);
    printf("bin: %s\n",   dec_to_bin(b, n));
    printf("dst: %d\n\n", bin_to_dec(b));

    n = -0xFFFFFFF;
    printf("src: %d\n", n);
    printf("bin: %s\n",   dec_to_bin(b, n));
    printf("dst: %d\n\n", bin_to_dec(b));

    n = -1234567;
    printf("src: %d\n", n);
    printf("bin: %s\n",   dec_to_bin(b, n));
    printf("dst: %d\n\n", bin_to_dec(b));
    return 0;
}
http://codepad.org/APPy8AFw
Nuklon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод десятичных чисел в двоичные Artesmann Общие вопросы C/C++ 7 29.05.2011 17:50
Сложение двух десятичных положительных чисел. целых чисел))) PEro_man Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 01.12.2010 12:40
Перевод десятичных чисел(Visual Basic) ioda1986 Помощь студентам 1 03.03.2010 00:51
Перевод отрицательных чисел в двоичную систему ioda1986 Помощь студентам 1 24.02.2010 00:55
Перевод десятичных чисел в тип Double Kuzya59 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 04.12.2008 15:41