2015-11-18 5 views
0

Я сделал программу для представления любого числа от десятичной до двоичной в C++, но когда я пытаюсь использовать отрицательные числа, он дает мне такие результаты: -1-1-1-11-1- 0, я не знаю почему. Я использовал короткий int для представления чисел от -32000 до 32000, также я использовал unsigned для получения больших чисел. Кроме того, я использовал массив для хранения чисел, а затем обратный их, чтобы иметь правильное представление. Я не думаю, что это правильный способ изменить массив, но он работает для меня. MAX (16) предназначен для хранения остальных в массиве, который составляет 16 бит. Вот код:C++ двоичные отрицательные числа

#include <iostream> 
using namespace std; 
const int MAX=16; 
int main(){ 
    int tab1[MAX]; 
    short int n; 
    cout<<"Input a number: "; 
    cin>>n; 
    for (int i=0; i<sizeof(n)*8; i++){ 
    tab1[i] = n%2; 
    n = n>>1; 
    } 
    cout<<"Binary representation: "; 
    for (int j=MAX-1;j>=0;j--){ 
    cout<<tab1[j]; 
    } 
    cout<<endl; 
    return 0; 
} 

ответ

1

Ваш процесс сдвига сохраняет тот факт, что знаковый бит переворачивается так все, что вам извлечь из имеет знаковый бит. Выключите его, используя побитовое (tab[i]=n&1), а не используя %, который в C сохраняет отрицательный знак.

Оператор % в C не является оператором modulo, а оператором остатка. С остальным оператором знак результата совпадает с знаком дивиденда. С помощью оператора modulo знак результата будет таким же, как и делитель.

Смежные вопросы