Форум программистов, компьютерный форум CyberForum.ru

Побитовое представление числа. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 57, средняя оценка - 4.70
Show2011
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 8
14.12.2011, 14:37     Побитовое представление числа. #1
Всем привет, подскажите пожалуйста, нужно:
Написать программу, которая принимает с клавиатуры число x, имеющее тип unsigned char и вывести значения его битов.
Как перевести это число в побитовое, и как обращаться к отдельным битам этого числа, отдельные биты можно записовать в массив, с этим проблем нету... а как перевести я не знаю, точнее я перевожу для типа int работает, а для unsigned char нет((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.12.2011, 15:17     Побитовое представление числа. #2
Цитата Сообщение от Show2011 Посмотреть сообщение
для типа int работает, а для unsigned char нет((
Покажите, как Вы делаете это для int?
Show2011
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 8
14.12.2011, 15:27  [ТС]     Побитовое представление числа. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <conio.h>
#include <time.h>
#include <vector>
#include <iostream>
#include <math.h>
#include <bitset>
 
using namespace std;
int main() {
    unsigned char s;
 
    std::cout<<"Enter the number of s"<<endl;
    std::cin>>s;
    for (unsigned int mask = 0x1 << sizeof(int) * 8 - 1; mask; mask >>= 1)
        std::cout << (s & mask? '1' : '0');
    getch();
return 0;
}
или так пробывал, чтоб меньше бит, я по 8 хочу выводить.
C++
1
2
3
 /*
for(i=sizeof(s)*8-1; i>=0; --i) { printf("%d", (s>>i)&1); }
 */
Например ввожу 1, выводит 00110001, вместо 00000001
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
14.12.2011, 16:04     Побитовое представление числа. #4
Цитата Сообщение от Show2011 Посмотреть сообщение
Например ввожу 1, выводит 00110001, вместо 00000001
Всё дело в том, что в переменную типа char при вводе помещается символ, а не число. Код символа "1" равен 0x31, что соответствует двоичной записи 00110001. Т.е. ваша программа работает правильно, но ввод оформлен неверно.
Show2011
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 8
14.12.2011, 16:11  [ТС]     Побитовое представление числа. #5
такс, т.е. если мне по заданию нужно вывести 1,3,5 бит этого числа, то я вывожу при числе 1(00110001) биты 0 1 0, а я думал что должно быть 00000001, и сравнивал с ним результат, значит все сделал верно наверно ...
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.12.2011, 16:13     Побитовое представление числа. #6
Цитата Сообщение от Show2011 Посмотреть сообщение
или так пробывал, чтоб меньше бит, я по 8 хочу выводить.
Второй вариант правильный, в котором sizeof(s) * 8.
Yandex
Объявления
14.12.2011, 16:13     Побитовое представление числа.
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru