Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15

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

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

Студворк — интернет-сервис помощи студентам
вопрос
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2011, 13:25
Ответы с готовыми решениями:

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

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

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

58
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
25.08.2011, 13:59
Из вопроса не понятно, что конкретно нужно рассказать про биты.
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 14:11  [ТС]
например поток берет 1 в чаре. что при этом происходит? 00000001? 00110001?(49)
или поток берет 32 битный инт. тут идет 00000000 00000000 00000000 00000001?
Я думаю что char обрабатывается быстрее ввиду своего размера, но....хотелось бы уточнить



Цитата Сообщение от iama Посмотреть сообщение
Потоки в стиле Си всегда быстрее потоков в стиле Си++
Что легче читать - 32-битный инт, который из символов нужно привести к числу в двоичной записи, или просто сам символ, не выполняя над ним никаких преобразований, а программист сам получает ответ - ноль это или единица, вычитая из полученого символа - '0'?
что значит фраза "сам символ, не выполняя над ним преобразований"
вопрос. как обрабатывается переменная типа char? в каком виде попадает в поток?
в поток уходит битовое представление цифрового значения чара из таблицы символов?
может вот так тогда?
char a = '1'; (49) 00110001?
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
25.08.2011, 14:21
Цитата Сообщение от AzaKendler Посмотреть сообщение
что значит фраза "сам символ, не выполняя над ним преобразований"
scanf\cin всегда считывают текст (char), и потом, если это нужно, и если это возможно, преобразует его в другой тип (int, float, и т.д.).
Также как и printf\cout, если им подаются в качестве параметров не символьные типы данных, сначала преобразует эти данные в текст, и тольк потом помещает их в поток.
1
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 14:27  [ТС]
понял. ну и в итоге чар будет чаром и далее будет (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, спасибо за подробную расшифровку. возможно когда буду читать про потоки там это все(про формат считывания) будет написано (надеюсь на это)
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:37
Цитата Сообщение от 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
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 16:18  [ТС]
talis, ну в итоге все преобразуется в двоичную систему, разве нет?
Цитата Сообщение от talis Посмотреть сообщение
далее в нечто
это я имел ввиду двоичную систему, понятную мащине.
0
Заблокирован
25.08.2011, 16:25
всё и так в двоичной, куда переводить то?
1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 16:32
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 байта можно вместить гораздо больше чисел, и математические операции в таком виде проще. По-этому строки хранят как последовательность символов, а числа (если они не часть строки) - в соответствующем числовом формате, будь то целочисленный знаковый/беззнаковый разных размеров, с плавающей точкой и так далее.
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 17:16  [ТС]
talis, ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.08.2011, 17:32
Цитата Сообщение от AzaKendler Посмотреть сообщение
ну т.е. это только для нашего удобства-понимания, верно? машина все равно нолики-единички думает?


Если уж на то пошло, читайте про триггеры. Хотя бы на википедии. Для начала будет достаточно.
1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 17:49
Лучший ответ Сообщение было отмечено как решение

Решение

AzaKendler, в теории - да. Реально размер регистра общего назначения в x86 - 32 бита, и очень многие операции над числами делаются в один такт процессора, так что в этом случае она думает двойными-словами (слово - 2 байта, двойное - 4). Если брать SSE и его развитие то там вообще за один такт выполняются операции над четырёхмерными векторами float (считайте: 1 float - 32 бита, 4 float - 128 бит один регистр SSE).

Streaming SMID Extensions

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

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

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

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

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

C
1
int i = 0;
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 20:24  [ТС]
talis, я имел ввиду следующее. если я присваиваю инту значение 1. все остальное место занимают нули?
0000000000000000001 (примерно так??). чтобы зарезервировать именно память под него - забито ли остальное место до 32 бит нулями?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2011, 20:25
Цитата Сообщение от talis Посмотреть сообщение
Обычно компиляторы инициализируют int нулём
Это какие, например?
P.S. если переменную объявить в глобальной области, то она инициализируется нулем.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.08.2011, 20:26
Цитата Сообщение от talis Посмотреть сообщение
Обычно компиляторы инициализируют int нулём, то есть при создании ему автоматически присваивается ноль
Обычно компиляторы как раз этого не делают. То есть если просто объвить int, то в ней будет мусор, который находился ранее в этом участке памяти.

Добавлено через 54 секунды
Цитата Сообщение от AzaKendler Посмотреть сообщение
если я присваиваю инту значение 1. все остальное место занимают нули?
0000000000000000001 (примерно так??).
Так. Но это не значит, что компилятор что-то где-то резервирует или забивает. Это просто представление единицы в двоичном виде.
1
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
25.08.2011, 20:28  [ТС]
fasked, спасибо подтвердил мои мысли. Значит я все верно расписал.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 20:31
Цитата Сообщение от AzaKendler Посмотреть сообщение
talis, я имел ввиду следующее. если я присваиваю инту значение 1. все остальное место занимают нули?
0000000000000000001 (примерно так??).
AzaKendler, в общем и целом, да. Ведь 0x00000001 == 0x1 :-)

Добавлено через 54 секунды

Не по теме:

Опоздал ответить...

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2011, 20:31
Помогаю со студенческими работами здесь

Задачка про биты
есть два числа по четыре байта 0000 0000 0000 0000 0000 0000 1001 0000 - первое число 0000 0000 0000 0000 0000 0000 0000 1100 -...

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

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

Интересно, может кто расскажет
Приветствую форумчане, на днях у меня возник вопрос! Вот в интернете много пишут, что современные PC игры под windows создаются при помощи...

Кто сталкивался с фирмой DNS, и кто может сказать про эксплуатацию их ноутов сервис и прочее
Добрый день. Кто сталкивался с фирмой DNS, и кто может сказать, что хорошего или плохого про нее, прошу выысказаться? Хочу приобрести...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru