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

Битовые операции - C++

Восстановить пароль Регистрация
 
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
27.02.2014, 10:29     Битовые операции #1
Битовые операции

Собсно,если используется 4 байтовая переменная,то почему она представлена 16 битами(1010 0110 0010 0110),а не 32 битами?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 10:29     Битовые операции
Посмотрите здесь:

битовые операции C++
C++ Битовые операции
Битовые операции C++
Битовые операции C++
Битовые операции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.02.2014, 10:39     Битовые операции #2
для экономии чернил и места
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
27.02.2014, 10:54  [ТС]     Битовые операции #3
Jupiter, что-то я не понял,как вывести результат операции на консоль.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{  
 
    1111000011110000 
    | 
    0000000000000001;
 
    system("pause");
}
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.02.2014, 11:06     Битовые операции #4
Цитата Сообщение от Игорюня Посмотреть сообщение
что-то я не понял,как вывести результат операции на консоль.
в коде с++ нельзя задать число литерал в двоичном виде
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.02.2014, 11:24     Битовые операции #5
Цитата Сообщение от Jupiter Посмотреть сообщение
в коде с++ нельзя задать число литерал в двоичном виде
Вообще-то можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
int operator"" b(const char* s)
{
    int ret = 0;
    while(s && *s)  
    {
        ret <<= 1;
        ret |= *s++ == '1' ? 1 : 0;
    }
    return ret;
}
 
int main() {
    
    std::cout << 0110b << std::endl; 
    
    return 0;
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
27.02.2014, 11:54     Битовые операции #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Вообще-то можно
А что у вас за среда, я постесняюсь спросить?
Моя не позволяет перегружать все подряд.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.02.2014, 11:58     Битовые операции #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А что у вас за среда, я постесняюсь спросить?
C++11. Проверить можно на ideone.com например.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.02.2014, 12:49     Битовые операции #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Вообще-то можно:
говоря "в коде на С++" я имею ввиду поддержку на уровне компилятора
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.02.2014, 12:52     Битовые операции #9
Jupiter, так это и есть поддержка на уровне компилятора, поддержка пользовательских литералов. Другое дело, что встроенного литерала нет
gray_fox
27.02.2014, 13:00
  #10

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Вообще-то можно:
Ну вот, пользовательский литерал, не начинающийся с _ )

Tulosba
27.02.2014, 13:08
  #11

Не по теме:

Цитата Сообщение от gray_fox Посмотреть сообщение
Ну вот, пользовательский литерал, не начинающийся с _ )
Знаю. Ворнинги пишет. Посмотрим, сделают ли в C++14 ошибкой

ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
27.02.2014, 13:09     Битовые операции #12
Цитата Сообщение от Игорюня Посмотреть сообщение
Jupiter, что-то я не понял,как вывести результат операции на консоль.
ну если не брать перегрузку, ту что привел Tulosba,
то переводи из двоичного в десятичный/шестнадцатеричный обрабатывай и обратно
например как из строки получить число
C++
1
2
3
4
5
6
7
8
9
 int IntToBin(char* str)
{
int res=0;
for( i=0;str[i]!='\0';i++)
{
  res*=2;
  res+=str[i]-'0'; 
 }
}
но функция не проверяет на допустимость символов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 13:52     Битовые операции
Еще ссылки по теме:

C++ Битовые операции
C++ Битовые операции
Битовые операции C++

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

Или воспользуйтесь поиском по форуму:
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
27.02.2014, 13:52     Битовые операции #13
Tulosba, если позволите, вот версия без рантайм циклов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <char first, char... bits>
struct bin_conv
{
    enum
    {
        value = bin_conv<first>::value * (1 << sizeof...(bits)) + bin_conv<bits...>::value
    };
};
template <char first>
struct bin_conv<first>
{
    static_assert(first == '0' || first == '1', "not a binary number");
    enum
    {
        value = first - '0'
    };
};
 
template <char... digits>
constexpr int operator "" b()
{
    return bin_conv<digits...>::value;
}
Yandex
Объявления
27.02.2014, 13:52     Битовые операции
Ответ Создать тему
Опции темы

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