0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 29
1

Вводим n. Нам нужно битовое представление этого числа

18.01.2014, 19:53. Показов 2543. Ответов 16
Метки нет (Все метки)

Вводим n. Нам нужно битовое представление этого числа
Как-то не получается у меня с этой темой
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2014, 19:53
Ответы с готовыми решениями:

Битовое представление числа, старший байт
Здравствуйте, программисты. Имеется такой вот код. Все в это коде абсолютно понятно, не могли бы...

Битовое представление вещественного числа, ошибка в коде
#include <iostream> using namespace std; void binary (double x); //функция вывода...

Вывести битовое представление целого числа со знаком
как можно упростить данный код и исправить ошибки? signed int b; signed int c; signed int d;...

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

16
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5990 / 3567 / 2504
Регистрация: 22.11.2013
Сообщений: 10,151
Записей в блоге: 1
18.01.2014, 21:05 2
Лучший ответ Сообщение было отмечено как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var
  n: word; s: string;
begin
  Write('Введите число: '); ReadLn(n);
  s:='';
  while n<>0 do begin
    s:=chr(ord('0')+n mod 2)+s;
    n:=n div 2;
  end;
  if s='' then s:='0';
  WriteLn(s);
end.
3
Супер-модератор
5913 / 2694 / 1298
Регистрация: 04.03.2013
Сообщений: 5,642
Записей в блоге: 1
18.01.2014, 21:08 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  n, a : byte;
  s, b : string;
begin
  s := '';
  write('число N: ');
  readln(n);
  while n > 0 do
  begin
    a := n mod 2;
    str(a, b);
    s := b + s;
    n := n div 2
  end;
  writeln('двоичное представление: ', s);
  readln
 end.
1
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 29
19.01.2014, 13:56  [ТС] 4
Спасибо! Только я вдруг узнал, что мне можно пользоваться только битовыми операциями. А ещё попытаться всё сделать без циклов

Добавлено через 1 час 11 минут
То есть циклы можно использовать. Остальное нельзя
0
Супер-модератор
5913 / 2694 / 1298
Регистрация: 04.03.2013
Сообщений: 5,642
Записей в блоге: 1
19.01.2014, 13:58 5
lord voldemort, сейчас пока с мобильного устройства, буду дома, что-нибудь придумаем
0
222 / 220 / 218
Регистрация: 03.07.2012
Сообщений: 460
19.01.2014, 14:01 6
Можно ещё с рекурсией вместо цикла
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses
  crt;
procedure DecToBin(n : word);
begin
  If n=0 then exit;
  DecToBin(n div 2);
  write(n mod 2);
end;  
var
  n : word;
begin
  clrscr; 
  write('n = '); readln(n);
  DecToBin(n);
  readln;
end.
0
Супер-модератор
5913 / 2694 / 1298
Регистрация: 04.03.2013
Сообщений: 5,642
Записей в блоге: 1
19.01.2014, 14:05 7
Торович, как вариант, но ТСу видимо главное обойтись без div/mod
0
222 / 220 / 218
Регистрация: 03.07.2012
Сообщений: 460
19.01.2014, 14:37 8
Написал так, вроде работает
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uses
  crt;
procedure DecToBin(n : word);
begin
  If n=0 then exit;
  DecToBin(n div 2);
  write(n mod 2);
end;  
var
  n, n1, err, i : word;
  s : string;
begin
  clrscr; 
  write('n = '); readln(n);
  DecToBin(n);
  s := '';
  while n>0 do begin
    n1 := n; i := 0;
    while n1>1 do begin n1 := n1 - 2; inc(i); end; 
    if n1 = 1 then s := '1' + s 
    else s := '0' + s;
    n := i; 
  end;
  writeln;
  writeln(s);
  readln;
end.
0
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 29
19.01.2014, 16:16  [ТС] 9
Спасибо! Только if мне тоже использовать нельзя Как и рекурсию...
0
ildwine
19.01.2014, 16:19
  #10

Не по теме:

Оффтоп... а может вообще замутить ассемблерными всавками?

0
222 / 220 / 218
Регистрация: 03.07.2012
Сообщений: 460
19.01.2014, 16:39 11
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses
  crt;
var
  n, n1, i : word;
  s : string;
begin
  clrscr; 
  write('n = '); readln(n);
  s := '';
  while n>0 do begin
    n1 := n; i := 0;
    while n1>1 do begin n1 := n1 - 2; inc(i); end; 
    s := chr(48+n1) + s;
    n := i; 
  end;
  writeln(s);
  readln;
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31246 / 20425 / 7961
Регистрация: 22.10.2011
Сообщений: 35,464
Записей в блоге: 6
19.01.2014, 16:57 12
Вот это тоже работает, без лишнего цикла:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  n : word;
  s : string;
begin
  write('n = '); readln(n);
  s := '';
  while n>0 do 
  begin
    s := chr(48 + (n and 1)) + s;
    n := n shr 1; 
  end;
  writeln(s);
end.
2
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5990 / 3567 / 2504
Регистрация: 22.11.2013
Сообщений: 10,151
Записей в блоге: 1
19.01.2014, 17:10 13
"n div 2" меняем на "n shr 1"
"n mod 2" меняем на "(n and 1)"
получим ровно то, что требовалось
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var
  n: word; s: string;
begin
  Write('Введите число: '); ReadLn(n);
  s:='';
  while n<>0 do begin
    s:=chr(ord('0')+(n and 1))+s;
    n:=n shr 1;
  end;
  if s='' then s:='0';
  WriteLn(s);
end.
Другой вариант, где справа налево сдвигается маска:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var
  n, m: word;
begin
  Write('Введите число: '); ReadLn(n);
  m:=$8000;
  while m<>0 do begin
    Write(byte(n and m<>0));
    m:=m shr 1;
  end;
  WriteLn;
end.
2
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 29
19.01.2014, 17:28  [ТС] 14
а что такое $8000? я не понимаааать
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5990 / 3567 / 2504
Регистрация: 22.11.2013
Сообщений: 10,151
Записей в блоге: 1
19.01.2014, 17:46 15
$8000 -- это:
-- "$" указывает на использование 16-ричного представления;
-- в двоичном виде это "1000 0000 0000 0000" -- двубайтное целое с 1 в старшем разряде и 0 в остальных;
-- по 2-му представлению легко переписать в 16-ричном: 8000;
-- в 10-ричной форме это 32768 -- привычно, но ненаглядно;
-- можно было заменить на "1 shl 15" -- 1 сдвинутая на 15 разрядов влево (то есть в 15-й разряд, считая с 0 -- старший для 2-байтного числа).

Затем в цикле мы:
-- проверяем число по маске и выводим результат;
-- маску сдвигаем вправо;
-- повторяем снова, пока не выдвинем единственный бит маски за крайний правый бит.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31246 / 20425 / 7961
Регистрация: 22.10.2011
Сообщений: 35,464
Записей в блоге: 6
19.01.2014, 22:26 16
bormant,
Pascal
1
2
// m:=$8000;
m:=$1 shl (8*sizeof(m) - 1);
даст тебе участок кода, который не надо будет править при изменении типа переменной (ибо кто сказал, что число должно быть именно Word-ом? А если будет байт? А если LongWord?)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5990 / 3567 / 2504
Регистрация: 22.11.2013
Сообщений: 10,151
Записей в блоге: 1
19.01.2014, 22:32 17
UI, я в курсе. Но с учетом оговорки ТС про проблемы с побитовыми операциями, излишнее усложнение посчитал преждевременным, оставлено было на потом на случай наличия интереса.

Добавлено через 1 минуту
И да, вам повезло, что сейчас не осталось машин с размером байта, отличными от 8. :-)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2014, 22:32

Функция, зеркально отображающая битовое представление числа
Необходимо написать программу которая зеркально переворачивает битовое представление целого числа,...

НАМ: Считая слово P записью числа в единичной системе счисления, получить остаток от деления этого числа на 2
A={ | }. Считая слово P записью числа в единичной системе счисления, получить остаток от деления...

Вводим число и программа должна показать сколько от 0 до этого числа четных чисел
Это из школьной программы, возможно у когонить есть программы выполняющие действия 1)Программа...

Битовое представление
Здравствуйте! Напишите пример функции, которая принимает целое число и выводит его битовое...


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

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

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