2015-12-14 2 views
0

Цель состоит в том, чтобы печатать двоичный вывод целых чисел -ve или + ve, а вывод правилен, когда мы объявляем переменную с подписанным, но неспособным понять поведение, когда переменная объявлена ​​как без знака.Unsigned char является печатью-ответом при печати в двоичном формате

int main() { 
     unsigned char num = -1; /* unsigned int */ 
     int i = 0; 
     /* Loop to print binary values */ 
     for (i = 0 ; i < 8; i++) { 
     if(num & 128u) 
     { 
     printf("1 "); 
     } 
     else 
     { 
     printf("0 "); 
     } 
     num= num<<1; 
     } 
     printf("\n"); 
     return 0; 
    } 

выход печатается как "1 1 1 1 1 1 1 1"

, который равен -1; Но я дал unsigned int в качестве входных данных. Как это работает?

+2

Можете ли вы объяснить в своем вопросе, что вы ожидаете от вывода, и почему? – Baldrick

+1

У вас нет 'unsigned int', у вас есть' unsigned char'. – mch

ответ

0

Когда вы делаете

unsigned char num = -1; /* unsigned int */ 

Это хранение в num 255 (Max Number) в десятичной системе. Таким образом, в каждом цикле if(num & 128u) является удовлетворение, так что о/р ....

/* выход печатается как "1 1 1 1 1 1 1 1" */

Есть некоторые больше ошибок, о которых вы говорите, вы говорите abot int, но в программе вы приняли char переменную и сохранили signed номер в unsigned переменной так, вы не получите o/p, что вы ожидаете.

+0

Спасибо, это дает некоторую идею .. но, учитывая двоичное представление чисел, мы можем знать, что это подписанный или unsigned int. Я хочу преобразовать двоичный код в десятичный. – Monty

+0

подписанное двоичное представление может помочь вам. Http: //stackoverflow.com/questions/3952123/representation-of-negative-numbers-in-c – Mohan

+0

, как узнать, двоичное число представляет собой отрицательное число? .... Http: //stackoverflow.com/questions/7794653/how-to-know-if-a-binary-number-represents-a-negative-number – Mohan

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