Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
1

Побитовые операции, основы

14.03.2019, 20:24. Просмотров 312. Ответов 18
Метки си (Все метки)

Вывести в десятичном виде поле длины k двоичного представления
данного натурального числа слева от n-го разряда.
Я думал что надо переводить число в 2 систему, но сказали что в памяти они хранятся как 2 ичные и можно взять оттуда и выбрать отдельный кусок, но я не понял как.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2019, 20:24
Ответы с готовыми решениями:

Побитовые операции
Есть число 0x7с1b. Перевожу его в двоичный вид - 0111110000011011. Каждый бит за что то отвечает....

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

Побитовые операции
Задача: Функция setbits(x, p , n, y) которая возвращает x, в котором n битов, начиная с позиции p,...

Побитовые операции
Даны два целых положительных числа А и В.: 1. Определить значение каждого бита числа А. 2....

Побитовые операции
Доброго времени суток. Читаю KR, добрался до упражнения 2.9: Применительно к числам, в...

18
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
15.03.2019, 13:14  [ТС] 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
unsigned getbits(unsigned х, int p, int n);
 
 int main()
 {
    unsigned x=101010100;
    getbits(x, 4,3 );
    printf(x);
    
    }
    unsigned getbits(unsigned х, int p, int n)
{
    
 return (x >> (p+1-n)) & ~(~0 << n);
 }
Вот функция которая находится это поле, но она не работает
0
ALast
15.03.2019, 13:57
  #3

Не по теме:

Цитата Сообщение от Бодрый666 Посмотреть сообщение
но сказали что в памяти они хранятся как 2 ичные
Кажется, что кто-то попытался ввести вас в заблуждение, так как:
C
1
2
int a = 10; //Сохраняем десятичное число в памяти
printf("%d", a); //На экран наше число также выводится в десятичном виде.
Вывод - никакого двоичного представления в реальном компьютере не существует! Если бы оно хранилось в двоичном представлении, то и выводилось бы в нём!

0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
15.03.2019, 14:24  [ТС] 4
Как тогда реализовать перевод в 2 систем и обратно?

Добавлено через 9 минут
И что не работает в моей функции? Она выдает sigsev
0
15.03.2019, 14:24
Байт
Эксперт C
20450 / 12980 / 2728
Регистрация: 24.12.2010
Сообщений: 27,157
15.03.2019, 14:35 5
Цитата Сообщение от ALast Посмотреть сообщение
Вывод - никакого двоичного представления в реальном компьютере не существует! Если бы оно хранилось в двоичном представлении, то и выводилось бы в нём!
Более чем странное утверждение... Или это шутка? До 1 апреля еще далеко, но немного размяться никто не запрещает
Бодрый666, если я правильно понял, то как-то так
C
1
2
3
4
5
6
x = (x >> n);
for(i=0; i<k; i++) {
  printf("%d", x&1);
  x >> 1;
}
printf("\n");
1
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
15.03.2019, 14:42  [ТС] 6
А можете объяснить ваш код, а то я не совсем понимаю как он работает, или приведите полную программу ТК когда] я делаю программу с ним он выводит какие-то значения, но это не перевод см и не поле
0
Байт
Эксперт C
20450 / 12980 / 2728
Регистрация: 24.12.2010
Сообщений: 27,157
15.03.2019, 14:46 7
Цитата Сообщение от Бодрый666 Посмотреть сообщение
или приведите полную программу
Лучше ты приведи свою и результаты (ввод, вывод)
также покажи на своей программе, что именно непонятно.
0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
15.03.2019, 14:57  [ТС] 8
Непонятно за что именно тут отвечают k и n

Добавлено через 9 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
main()
{
    int x,n,i,k;
    x=10;
    n=2;
    k=1;
    x = (x >> n);
for(i=0; i<k; i++) {
  printf("%d", x&1);
  x >> 1;
}
printf("\n");
    }
0
Байт
Эксперт C
20450 / 12980 / 2728
Регистрация: 24.12.2010
Сообщений: 27,157
15.03.2019, 14:59 9
Цитата Сообщение от Бодрый666 Посмотреть сообщение
за что именно тут отвечают k и n
k - длина выводимого поля.
n - номер разряда (счет с нуля и справа) Если считать надо справа, следует преобразовать
n = sizeof(ont) - n - 1;

Добавлено через 1 минуту
Твой код должен вывести "0"
0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
15.03.2019, 15:23  [ТС] 10
Если задать х=100110
N=4
K=3 должно вывести 001 а выводит 000

Добавлено через 3 минуты
В этом так и выводит а если даже тут же сделать к= 2 будет 00

Добавлено через 19 минут
Байт,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
 
unsigned getbits(unsigned x, int p, int n);
 
 int main()
 {
    unsigned x=10101;
    getbits(x, 2,2 );
    printf("%u",getbits);
 
    }
    unsigned getbits(unsigned x, int p, int n)
{
 return (x >> (p+1-n)) & ~(~0 << n);
 }
что не так вроде должно работать(по книге Кернигана) но выводит непонятное число
0
Байт
Эксперт C
20450 / 12980 / 2728
Регистрация: 24.12.2010
Сообщений: 27,157
15.03.2019, 19:43 11
Бодрый666, ты задаешь десятичное число.

Добавлено через 47 минут
Бодрый666, прошу прощения, мой код из поста 5 выводит биты наоборот, в обратной последовательности.
Лучше так.
C
1
2
3
4
5
6
x = (x >> n);
for(i=k-1; i>=0; i--) {
  if (x&(1<<i)) printf("1");
  else printf{"0");
}
printf("\n");
0
frscr
6 / 5 / 1
Регистрация: 05.10.2018
Сообщений: 17
15.03.2019, 19:47 12
Цитата Сообщение от ALast Посмотреть сообщение
Вывод - никакого двоичного представления в реальном компьютере не существует! Если бы оно хранилось в двоичном представлении, то и выводилось бы в нём!
Эммм. Это как понимать? Информация измеряется в байтах, битах и прочих. Бит это либо 0 или 1. В одном байте допустим 8 бит и 0011 1010 к примеру в десятичном представлении будет как 58. Вроде как компьютер вообще не знает не if, ни else, ни 9, ни 8, ни 4 Все эти представления для человека, что бы понимать и читать легче было. В один байт Вы можете впихнуть не более 256 значений он же char. Вся информация в компьютере это 0 либо 1 в ячейках памяти - оно же электрический заряд. Он либо есть, либо его нет.
0
ALast
15.03.2019, 22:11
  #13

Не по теме:

frscr, вы считать то умеете? Вы в двоичной системе считаете? Нет! Почему? Потому что это не удобно! Так зачем делать неудобно компьютеру? Зачем ему работу усложнять? Это люди уже давно поняли и хранят информацию в десятичном представлении внутри ПК, так как ему считать легче! Какой к чёрту двоичной код в компьютере...=-O Сами то себя слышите?

0
Байт
Эксперт C
20450 / 12980 / 2728
Регистрация: 24.12.2010
Сообщений: 27,157
15.03.2019, 22:19 14
ALast, Шутки продолжаются? Но уже не смешно...
1
frscr
6 / 5 / 1
Регистрация: 05.10.2018
Сообщений: 17
15.03.2019, 22:31 15
Цитата Сообщение от ALast Посмотреть сообщение
frscr, вы считать то умеете? Вы в двоичной системе считаете? Нет! Почему? Потому что это не удобно! Так зачем делать неудобно компьютеру? Зачем ему работу усложнять? Это люди уже давно поняли и хранят информацию в десятичном представлении внутри ПК, так как ему считать легче! Какой к чёрту двоичной код в компьютере... Сами то себя слышите?
Уважаемый, книжки почитайте про устройтсво ПК, почитайте так же книги Д. Кнута - очень рекомендую. Память это ячейки в которых либо есть электрический заряд (1) либо его нету (0) эти ячейки представлены ввиде битов, 8 бит = 1 байт и т.д и т.п. если в группе ячеек выставлено 1111 1111, то это 255 в десятичной, 0xff в 16ти ричной системах или какой-то там символ в ascii. Я извиняюсь за сообщение не по теме, но меня иногда бомбит от таких персонажей. Вся информация в любой ЦИФРОВОЙ технике хранится в виде 0 и 1 и ВСЁ - всё фото, видео, аудио, текст, зашифрованная, не зашифрованная, абсолютно ВСЯ информация в цифре ввиде нулей и единиц - так устроен цифровой мир. На аналоговых носителях ввиде кассет иначе конечно. Компьютеру вообще пофиг на внешний мир и чего там с чем и кому надо. У него есть проц который выполняет команду загруженную в оперативку и всё, всё, всё больше ничего. Программы, компиляторы и прочие радости уже трактуют связь для понимание между процессором и человеком.
1
Байт
15.03.2019, 22:36
  #16

Не по теме:

frscr, мой совет - не обращайте внимания. Это или шутка (готовится человек к 1 апреля), или весеннее обострение. И в том и в другом случае споры бесполезны

1
ALast
15.03.2019, 22:43
  #17

Не по теме:

Байт, извиняюсь за свой бесконечный оффтоп, который даже шутками нельзя называть, но уважаемый frscr
не оставляет мне шансов...
frscr, вы сами то нули и единицы внутри компьютера видели? Если да, то подскажите, как мне на них посмотреть также, если нет, то вначале сами постарайтесь убедиться в правдивости информации, которую вам подают всякие "проходимцы" типа Кнута, Танненбаума, Патела и т.п.
Байт, если человек очевидного не замечает, что сделать то?

0
frscr
6 / 5 / 1
Регистрация: 05.10.2018
Сообщений: 17
15.03.2019, 22:52 18
Последний оффтоп и Всё. А как Вы представляете информацию в десятичном виде? Я писал про электрический заряд в ячейках которые созданы световыми волнами на кремниевой пластине. Если в ячейке есть заряд, то это единица если нет, то ноль/нуль/zero/null. Давайте и вправду не засорять раздел. Удачи и счастья.
1
ALast
15.03.2019, 23:06     Побитовые операции, основы
  #19

Не по теме:

Цитата Сообщение от frscr Посмотреть сообщение
А как Вы представляете информацию в десятичном виде?
Хороший вопрос, тут я мог бы продолжать не стараться косить под более-менее адекватного человека, но... Не знаю как это сделать и самое главное - не вижу зачем это вообще пытаться сделать.
Цитата Сообщение от frscr Посмотреть сообщение
засорять раздел.
Это в принципе невозможно здесь сделать, так как каждый день на форуме появляются темы, на 99% которых можно свободно отвечать, умея тупо пользоваться поиском по форуму. Так что с уверенностью можно сказать, что наш "спор" очень скоро будет потерян в потоках двоичного кода.
Байт, вообще в этом был смысл, так как человек посоветовал автора, возможно, в этот момент, немного освежил в памяти то, что он узнал от этого писателя.

0
15.03.2019, 23:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2019, 23:06
Привет! Вот еще темы с ответами:

Побитовые операции с float
Установить в заданное пользователем состояние определённое количество рядом стоящих бит, номер...

Задача на падежи (побитовые операции)
Есть задача: К введенному числу (от 0 до 99) приписать слово «копеек» в правильном падеже В...

Побитовые операции - разобрать пример
Доброго времени суток, уважаемые программисты! Помогите разобраться с побитовыми операциями. К...


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

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

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