Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
BobbyD
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 2
1

Перевод из десятичной системы unsigned long long в двоичную c битовыми операциями, получается странный реультат

20.10.2018, 23:28. Просмотров 1761. Ответов 3

Доброго времени суток!

Нужно выразить число в двоичной системе, показав все 64 символа (unsigned long long). Важно, чтобы программа вывела именно все символы и чтобы использовались битовые операции.
Т. е. если input "15", то output будет выглядить так: "00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111"

Написал вот такую программу:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main () {
    unsigned long long X;
    scanf ("%llu", &X);
    int i;
    for (i = 63; i>=0; i--) {
        if ((X&(1<<i))!=0) 
            printf ("1");
        else 
            printf ("0");
 
                 if ((i%8) == 0)
            printf (" ");  // Чтобы были пробелы через каждые 8 цифр
    }
    return 0;
}
С помощью единицы и << проверяю, установлен ли бит, в зависимости от результата, программа выводит "0" или "1".
Проблема заключается в том, что программа почему-то работает только с битами 31-0 , выводя полученный результат два раза.

Т. е. если input "15", то output будет выглядить так:
00000000 00000000 00000000 00001111 00000000 00000000 00000000 00001111 вместо
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111


А с более большими числами еще интереснее: если ввести 123451234512345, то выйдет

10111010 11111010 11101101 11011001 10111010 11111010 11101101 11011001 вместо
00000000 00000000 01110000 01000111 00111010 11111010 11101101 11011001

Выводится два раза правая часть, но еще единица появляется.

Я в замешательстве, не знаю, почему так происходит..


Интересно, что такая программа для int работает. Счетчик соответственно:

C
1
for (i = 31; i >=0; 1--)
Если это важно, пользуюсь Ubuntu 18.04 с виртуальной машины Virtual box.

Подскажите, в чем проблема? Уже как только не крутил, всеравно результат тот же. Я в этом деле новичок, не судите строго.

Спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2018, 23:28
Ответы с готовыми решениями:

Перевод в двоичную СС unsigned long без массивов
Здравствуйте! Есть задание: перевести usigned long int в двоичную систему счисления (без...

Запись в unsigned long long через scanf
int main(void) { unsigned long long n; int *a; scanf_s(&quot;%f&quot;, &amp;n); ...................

Перевод из десятичной системы исчесления в двоичную
Помогите разобраться в чем ошибка. Вот попробывал сделать что то типо для перевода из десятиричной...

Перевод числа с десятичной системы в двоичную
Простите за банальный вопрос, но реально уже с пол часа лажу в нете немогу нормальной функции...

Перевод чисел из десятичной системы в двоичную
Помогите кто может, подкиньте идею, необходимо перевести написать программу которая переводит число...

3
ft4l
Невнимательный
435 / 358 / 127
Регистрация: 08.02.2013
Сообщений: 1,001
Записей в блоге: 2
21.10.2018, 02:51 2
Лучший ответ Сообщение было отмечено BobbyD как решение

Решение

интересно... такие-же результаты
вроде правильно срабатывает это
C
1
if (X&(((unsigned long long)1)<<i))
но если вместо 1 делать переменную unsigned long long Y=1;
добавляется лишнее 1<<32
// gcc 8.1.0 (mingw-w64 i686)
1
Kuzia domovenok
2987 / 2537 / 659
Регистрация: 25.03.2012
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
21.10.2018, 04:36 3
Лучший ответ Сообщение было отмечено BobbyD как решение

Решение

C++
1
1ull<<i
1
BobbyD
0 / 0 / 0
Регистрация: 20.10.2018
Сообщений: 2
21.10.2018, 10:10  [ТС] 4
Ребята, спасибо вам большое! Теперь все хорошо работает.
0
21.10.2018, 10:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2018, 10:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевод из десятичной(двоичной) системы счисления в двоичную(десятичную)
Всем добрый день, кто может помочь как можно реализовать данную задачу на С? Уже долго мучаюсь с...

Преобразование типов, long и unsigned
1.Если какой-либо операнд имеет тип long, то другой операнд преобразуется к типу long, и это и...

Напечатать переменную unsigned long
как напечатать переменную unsigned long (огромное число) вывод на экран получился только с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.