Перейти к содержимому

Как вывести число в двоичном виде cи

  • автор:

Как вывести число в двоичном виде cи

Форумчанин

Регистрация: 18.04.2009

Сообщений: 688

как вывести число в двоичной форме?

как вывести число в двоичной форме?
среда: vc
я прочёл МСДН, но так тока увидел cout cout про двоичную ничё

Форумчанин

Регистрация: 18.04.2009

Сообщений: 688

// TObase64.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) < short a; a = 6; ~a;//не работает. почему не знаю((((( поскажите плиз coutslength = 8 - slength; for (int i = 0; i

почему-то не работает ~a

Вывод двоичного числа в СИ

@avp без преобразования возможно вывести в этом чудесном языке? или нужно каждый символ обрабатывать и выводить?

12 фев 2019 в 17:46
0010 не является двоичным числом в синтаксисе Си
12 фев 2019 в 17:46
printf("%s", "0010"); , не?
12 фев 2019 в 17:49

@Qada: Для утилитарных целей место двоичного вывода в языке С занял шестнадцатеричный вывод. Если вам все это нужно "для дела", то пользуйтесь шестнадцатеричным. Если же вам нужен именно двоичный (ибо "задание такое"), то да - "каждый символ обрабатывать и выводить".

12 фев 2019 в 18:09

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вы даете printf восьмеричное число 10 и просите напечатать его как десятичное. Вам выводится 8 - вы ждали чего-то другого?

Не существует спецификации формата для вывода двоичных чисел, поэтому их надо выводить вручную. В качестве примера:

// Вывод байта в двоичном виде typedef unsigned char byte; int main() < byte b = 93; // Или любое другое for (int i = 0; i < 8; i++) < printf("%c", (b & 0x80) ? '1' : '0'); b printf("\n"); return 0; > 

Отслеживать
ответ дан 12 фев 2019 в 18:44
4,894 8 8 золотых знаков 15 15 серебряных знаков 29 29 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как записать число в файл в двоичном режиме?

int value = 11; // . . . 00001011
В строковом режиме можно просто использовать fprintf(fp, "%d", value) и тогда в файл запишется символьное представление числа 11.
А как записать в файл двоичное представление числа, т.е само число а не строку.
Знаю только про методы fread/fwrite , но с помощью них можно записать только массив данных.
А как записать в файл одиночное число?

  • Вопрос задан более трёх лет назад
  • 1591 просмотр

1 комментарий

Простой 1 комментарий

Массив из одного числа. В качестве массива попробуй указатель на число.
Решения вопроса 1
GrigorySvetov @GrigorySvetov

1. Если про бинарный вывод (т.е. когда сам символ смысловой нагрузки не несет, а несет номер символа в кодировке) ("настоящий" бинарный вывод).

Основной прикол в том, что массив в Си можно понимать как просто указатель на фиксированный по размеру набор значений, а саму переменную массива - как указатель на этот набор.
И действительно, так привычное нам обращение по индексу arr[i] в Си переводится в *(arr+i) (разыменование по указателю со смещением).
Поэтому когда мы пишем fwrite(arr, . ), на самом деле мы пишем туда УКАЗАТЕЛЬ. В остальном Си достаточно всё равно, что происходит (главное чтобы без выходов на чужую память, иначе тут уже система убьет процесс). Т.е. мы передаем указатель на ЧИСЛО (одно число) как будто это целый массив, дальше всё честно для него пишем. Код получается вот такой:

#include int main() < FILE *fp; //переменная файлового потока int value=11; //наша переменная с числом fp=fopen("output.txt","wb");//открываем файл на перезапись ('w') в бинарном режиме ('b' в "wb") if (fp==NULL)< //если файл не был открыт, то. perror("file hadn't opened");//вывести в поток ошибок сообщение (обычно это то же, что поток вывода (т.е. экран компьюетра) >else < //иначе.. fwrite(&value,sizeof(int),1,fp); //вывести значение как массив с единственной ячейкой >fclose(fp);//закрыть в любом случае (если fp==NULL, ошибкой всё равно не будет, а читается удобнее, чем все эти ветки if'ов return 0; >

2. Если про то, что в комментарии, т.е. с ноликами и единичками в файле. Это "ненастоящий" бинарный режим, т.к. каждый символ '0' и '1' - это правда честные отдельные символы, которые надо читать как текст. В этом случае, я думаю, Вы просто это число побитно обрабатываете и fputc()'ом загоняете (но fopen() будет уже таким: fopen("", "w"); (а не fopen("

как вывести двоичное представление числа на экран в Си

Как вывести двоичное представление числа (например 9) на экран с использованием оператор printf() и scanf()? если не сложно напишите прогу пожалуйста.

Лучший ответ

Если нестандартная функция itoa() есть в библиотеке твоей реализации компилятора, то можно так:

main() <
int n = 9;
char b[sizeof(n) + 1];
printf("%d(10) = %s(2)\n", n, itoa(n, b, 2));
>

а если itoa нет, то можно реализовать ее самому, или взять готовую реализацию, например википедия: itoa (Си)

Остальные ответы

unsigned short n;
scanf("%u", &n);
for (int j=sizeof(n)-1; j>=0; j--)
printf("%u",(n>>j)&1);

Не уверен до конца насчет синтаксиса, 1000 лет на Ц не писал, но думаю, идея понятна.

Похожие вопросы
Ваш браузер устарел

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *