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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

может кто расскажет про биты? - C++

25.08.2011, 13:25. Просмотров 2297. Ответов 58
Метки нет (Все метки)

вопрос
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 13:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос может кто расскажет про биты? (C++):

Time.h кто расскажет или покажет - C++
Доброе время суток! имеем структуру struct Promo:tm //Создаем структуру! { std::string Client; //Название...

кто может обьяснить про что тут говорится - C++
С помощью этого оператора & можно также выделять и устанавливать значения от- дельных битов. Представьте себе, что в написанной вами...

Задача про биты - C++
Написать функцию, которая возвращает число, полученное из числа X,в котором все розряды, расположенные правее центральной позиции, заменены...

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат - C++
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

... В четных байтах числа в двоичной системе переместить нулевые биты в старшие биты, а в нечетных байтах – в младшие ... - C++
Доброго времени суток всем, столкнулся с проблемой по С++,требуется написать программу: которая получает 1)случайное целое типа int,...

кто может С++ - C++
Помогите пожалуйста срочно нужно, а времени совсем нет!!!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
25.08.2011, 13:59 #2
Из вопроса не понятно, что конкретно нужно рассказать про биты.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.08.2011, 14:11  [ТС] #3
например поток берет 1 в чаре. что при этом происходит? 00000001? 00110001?(49)
или поток берет 32 битный инт. тут идет 00000000 00000000 00000000 00000001?
Я думаю что char обрабатывается быстрее ввиду своего размера, но....хотелось бы уточнить



Цитата Сообщение от iama Посмотреть сообщение
Потоки в стиле Си всегда быстрее потоков в стиле Си++
Что легче читать - 32-битный инт, который из символов нужно привести к числу в двоичной записи, или просто сам символ, не выполняя над ним никаких преобразований, а программист сам получает ответ - ноль это или единица, вычитая из полученого символа - '0'?
что значит фраза "сам символ, не выполняя над ним преобразований"
вопрос. как обрабатывается переменная типа char? в каком виде попадает в поток?
в поток уходит битовое представление цифрового значения чара из таблицы символов?
может вот так тогда?
char a = '1'; (49) 00110001?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
25.08.2011, 14:21 #4
Цитата Сообщение от AzaKendler Посмотреть сообщение
что значит фраза "сам символ, не выполняя над ним преобразований"
scanf\cin всегда считывают текст (char), и потом, если это нужно, и если это возможно, преобразует его в другой тип (int, float, и т.д.).
Также как и printf\cout, если им подаются в качестве параметров не символьные типы данных, сначала преобразует эти данные в текст, и тольк потом помещает их в поток.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.08.2011, 14:27  [ТС] #5
понял. ну и в итоге чар будет чаром и далее будет (49) 00110001.
а 32 битный инт. вначале преобразуется в чар и далее в нечто

4848484848484848 4848484848484848 4848484848484848 4848484848484849

00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000 00110000 00110000 00110000 00110001


теперь все стало на свои места (или нет? инт заполнен нулями?)

Добавлено через 1 минуту
kazak, спасибо за подробную расшифровку. возможно когда буду читать про потоки там это все(про формат считывания) будет написано (надеюсь на это)
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:37 #6
Цитата Сообщение от AzaKendler Посмотреть сообщение
а 32 битный инт. вначале преобразуется в чар и далее в нечто
Когда? При вводе из потока или при выводе в поток?

Добавлено через 5 минут
В этом случае советую думать не битами, а байтами:

C++
1
2
char buffer[8];
cin >> buffer;
вводим: hello[ENTER]
после ввода char buffer[8] содержит: 68 65 6C 6C 6F 00 00 00 00

C++
1
2
int number;
cin >> number;
вводим: 315[ENTER]
после ввода сначала есть некая (внутренняя строка), 33 31 35 00 00 00 00 ... , которая потом преобразуется в четырёхбайтовый int: 00 00 01 3B
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.08.2011, 16:18  [ТС] #7
talis, ну в итоге все преобразуется в двоичную систему, разве нет?
Цитата Сообщение от talis Посмотреть сообщение
далее в нечто
это я имел ввиду двоичную систему, понятную мащине.
LosAngeles
Заблокирован
25.08.2011, 16:25 #8
всё и так в двоичной, куда переводить то?
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 16:32 #9
AzaKendler, да, в машине всё хранится в двоичной системе, однако минимальный адресуемый участок памяти - это байт. К тому же, проще оценить число в виде 0x1B35, чем 1101100110101, согласитесь

Символы в машине хранятся в виде чисел. Например, символ пробела - 0x20, символ 'A' - 0x41, символ '0' - 0x30, символ '2' - 0x32. То есть строка "abba 1972" будет выглядеть в памяти как

61 62 62 61 20 31 39 37 32 00

Если записать в шестнадцатеричной системе, разумеется.

Но число 1972, которое тут выглядит как 31 39 37 32, гораздо экономичнее и удобнее хранить как 07 B4 - и места меньше занимает, и в те же 4 байта можно вместить гораздо больше чисел, и математические операции в таком виде проще. По-этому строки хранят как последовательность символов, а числа (если они не часть строки) - в соответствующем числовом формате, будь то целочисленный знаковый/беззнаковый разных размеров, с плавающей точкой и так далее.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.08.2011, 17:16  [ТС] #10
talis, ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.08.2011, 17:32 #11
Цитата Сообщение от AzaKendler Посмотреть сообщение
ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?


Если уж на то пошло, читайте про триггеры. Хотя бы на википедии. Для начала будет достаточно.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 17:49 #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
AzaKendler, в теории - да. Реально размер регистра общего назначения в x86 - 32 бита, и очень многие операции над числами делаются в один такт процессора, так что в этом случае она думает двойными-словами (слово - 2 байта, двойное - 4). Если брать SSE и его развитие то там вообще за один такт выполняются операции над четырёхмерными векторами float (считайте: 1 float - 32 бита, 4 float - 128 бит один регистр SSE).

Streaming SMID Extensions

Так что сказать, что компьютер думает ноликами и единичками - это только небольшая часть истины. На самом низком аппаратном уровне - да. А так вообще всё гораздо интереснее
alkagolik
Заблокирован
25.08.2011, 18:42 #13
ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?
Машина не думает. Принимает конкретные электрические сигналы, условно обозначаемые {1,0}, и это речь не идет об аналоговых устройствах, а конкретно дискретные, т.е. те на которых базируется ПК, нотебук, ..., и много еще чего О_о. ИМХО (может я и не прав) вопрос некорректен с той точки зрения, что не определен уровень взаимодействия. Если спуститься "в самый низ" на физический, то конечно это двоичные вектора, ниже - дискретные устройства (регистры, триггеры, коммутаторы, ИМС, ПЛМ), ниже - транзисторы, тиристоры, резисторы, ниже - электрический потенциал в цепи (-0,5В -логический нуль, -0,8В - логическая единица для отрицательной логики и 0,8В - логический нуль, 0,5В - логическая единица для положительной логики). Видя шестнадцатеричный вектор в мониторе, конечно была проделана уйма команд, чтобы в мониторе в определенной последовательности открылся\закрылся ряд транзисторов и повернулись кристаллы опять же определенным образом, ну и конечно для этого сначала надо вычесть какой именно вектор подать в шину. Если интересно то думаю что на многое прольет свет.
 Комментарий модератора 
Ссылки в личку!

Если это сильно "низко" то смотри как работает компилятор и все станет ясно, я лично не знаю, но пока и не возникало неообходимости.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.08.2011, 20:14  [ТС] #14
ужос. столько полезной инфы накидали. спасибо надо прочесть.
а про нолики и единички это я к тому что в той теме шла речь о том что гризлик показал свой вариант и он оказался быстрее чем просто с инт в разы. вот мне и стало интересно а почему? Подумалось из за размера. А потом подсказали что оказывается поток по умолчанию берет символы. т.е. если мы подаем на него 32битный (4х байтный инт) то он переводится в символьное представление и на это расходуется время. вот я и прикинул что получится если в итоге в двоичной системе окажется символ 1 или инт 1. и накидал ноликов и единичек. И получилось в случае с интом монстроподобная конструкция, это (мне) наглядно показало что значит сие преобразование. Спасибо парни огромное за кучу полезных ссылок мне как раз очень интересно железо и как все работает.

вот вопрос. инт забит нулями чтобы зарезервировать размер?

Добавлено через 1 минуту
alkagolik, нет на самый низ не планировалось. планировалось в этом случае ограничиться информационным преднизьем. насколько получилось уж незнаю

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?
наверно написав так я вызвал не совсем правильную реакцию. буду следить за речью впредь
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 20:16 #15
Цитата Сообщение от AzaKendler Посмотреть сообщение
вот вопрос. инт забит нулями чтобы зарезервировать размер?
Размер резервируется вне зависимости от содержимого переменной. Обычно компиляторы инициализируют int нулём, то есть при создании ему автоматически присваивается ноль, однако рекомендуется не полагаться на такое поведение и инициализировать переменные самостоятельно:

C
1
int i = 0;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2011, 20:16
Привет! Вот еще темы с ответами:

может поможет кто? - C++
тебята я только недавно начал изучать язык С++ по книге Герберта шелтда. Кароче там один момент который я понять не могу а именно: тип...

3 задачи на С++.. Кто может... - C++
1. В заданой строке (ввести с клавиатуры) между словами вместо ропбула поставить запяьые. 2. Описать функцию - пользователя вставки...

решите кто может - C++
Дана последовательность из n целых чисел. Определить, все ли числа являются нулевыми или первое ненулевое число является положитель-ным. ...

Кто может объяснить? - C++
Кто может объяснить как это делать? Задание 1. В оперативной памяти вектор int X расположен, начиная с адреса B7F0. Какие значения примут...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.08.2011, 20:16
Ответ Создать тему
Опции темы

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