Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 57

Как получить двоичный код по адресу из переменной как он есть

26.08.2021, 14:22. Показов 4710. Ответов 34

Студворк — интернет-сервис помощи студентам
Вопрос вот в чем. Изучал указатели.
int x = 1; //переменная
int *p = &x; //указатель на нее
cout << p; .//вывод шеснадцатеричного адреса в памяти переменной x
cout << *p << вывод значения которое хранится по адресу переменной x, а в случае моего компилятора в 4байтах начиная с этого адреса.
НО! он вывел 1, а в памяти то лежат только единицы и нолики. Значит что то преобразовало двоичную в десятичную и выдало.
А как бы мне это что то отключить и напрямую взять именно единицы и нолики по адресу? Ну вот люблю я на них смотреть.
по идеи это должно быть как то так 00000000 00000000 00000000 00000001 (ну раз 4 размер int). Если ли какая то функция прямого доступа к памяти по адресу?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2021, 14:22
Ответы с готовыми решениями:

Как получить шестнадцатиричный (или двоичный) код файла?
Необходимо получить шестнадцатеричный код файла, кто нибудь знает как это можно сделать?

Как получить код страниц, если есть авторизация!
нужно получить код страниц выдаваемых браузеру ПХП сервером при обработке пост и гет запросов. дело в том что бота ни как не получается...

Имя переменной как переменная. Как получить доступ к такой переменной?
Подскажите как получать данные из переменной, если ее имя вычисляется? И соответственно как потом возвращать в подобную переменную данные?...

34
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
29.08.2021, 08:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alexu_007 Посмотреть сообщение
Что вы имеете ввиду, говоря о 4294967296-ричной системе счисления?
Что 32-битный компьютер оперирует цифрами от 0 до 4294967295 (если записать их в десятичной системе, естественно).
Цитата Сообщение от SmallEvil Посмотреть сообщение
Изначально тема о представлении числа.
Вот именно. ТС ошибочно считает, что компьютер оперирует битами, поэтому и доступ должен быть к каждому биту. Это не так: компьютер оперирует машинными словами, поэтому и доступ возможен только к машинному слову.
Если бы вы хоть немного ознакомились с архитектурой ЭВМ и микроконтроллеров, вы бы знали, что операция вывода машинного слова есть, любая арифметика с машинным словом есть. А вот чтобы получить бит, надо приложить некоторые усилия.
И внутреннее устройство АЛУ тут никакого значения не имеет.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.08.2021, 14:34
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что 32-битный компьютер оперирует цифрами от 0 до 4294967295 (если записать их в десятичной системе, естественно).
какой же ты тугой, никакая это не цифра, один регистр - набор битов,
и ЦП их обрабатывает в зависимости от данной ему команды.
ВСЕ.
А на счет того чем оперирует ЦП я уже сказал.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если бы вы хоть немного ознакомились с архитектурой ЭВМ и микроконтроллеров,
микроконтроллеры никакого отношения к ЦП не имеют.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
29.08.2021, 17:08
Даже не знаю как еще понятнее объяснить.
Что такое цифра? Это минимальная единица информации в данной системе счисления. Из последовательности цифр составляются числа. Важно то, что любая арифметическая операция работает именно с цифрами. Например, при сложении в столбик мы складываем младшие цифры числа, потом следующие и так далее.
И точно так же работает машина. Она складывает сначала самые младшие машинные слова, потом следующие и так далее. Очевидно, что чем на меньшее количество цифр мы разделим исходное число, тем меньше операций придется проделать. Но вычислительные способности человека ограничены и ему неудобно работать с цифрами больше 10. У электроники ограничение значительно более слабое, и там встречаются цифры из 8, 32, 64 и другого количества бит. Соответственно даже 8-битной машине нужно в 2.5 раза меньше действий чтобы сложить два числа, чем человеку.
Цитата Сообщение от SmallEvil Посмотреть сообщение
микроконтроллеры никакого отношения к ЦП не имеют.
То есть вы не знаете даже что такое микроконтроллер и чем он отличается от процессора? Попробуйте найти ответ самостоятельно.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,350
29.08.2021, 21:51
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И точно так же работает машина. Она складывает сначала самые младшие машинные слова, потом следующие и так далее.
При чём здесь это? Очевидно, что машина знает только две цифры: 0 и 1. Остальное делают прикладные программы.

Добавлено через 1 минуту
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что 32-битный компьютер оперирует цифрами от 0
32-битный компьютер оперирует с узорами из единиц и нулей, которые передаются по 32-битной шине.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
29.08.2021, 22:21
Цитата Сообщение от alexu_007 Посмотреть сообщение
При чём здесь это? Очевидно, что машина знает только две цифры: 0 и 1. Остальное делают прикладные программы.
Разумеется, нет.
Прикладные программы переводят из 4294967296-ричной в десятичную, шестнадцатеричную и т.д. - но только для общения с пользователем. Внутри себя он все также работает с огромными цифрами.
Неужели термины "машинное слово" и "система счисления" настолько сложны для вашего понимания?
0
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 57
30.08.2021, 08:49  [ТС]
Мама(....вот это я натворил шороху). А все казалось таким простым и логичным.
Спасибо всем кто написал. Сейчас осмыслю по возможности.
Едино добавить хочу, ну ведь в памяти то это единицы и нолики, .....хотя уже и сам вычитал что программа с памятью напрямую не работает, это какая то виртуальная фигня в ОС. Так что вариант выдать полученное значение в двоичном виде наверное мое. В силе остается вопрос про работу напрямую с памятью, есть ли такие возможности у С++. То есть в обход того что контролирует и распределяет память в ОС напрямую обратиться к ОЗУ по адресу?
0
2164 / 1242 / 511
Регистрация: 11.10.2018
Сообщений: 6,379
30.08.2021, 09:05
Цитата Сообщение от viewrock Посмотреть сообщение
В силе остается вопрос про работу напрямую с памятью, есть ли такие возможности у С++.
- тебе же написали все. Прочитай еще разок. Или еще 100 раз.

Добавлено через 19 секунд
Возможности такие есть, да.

Добавлено через 3 минуты
Писать можно все что угодно, только в выделенные программе области памяти. Иначе будет ошибка доступа(Access Violation) оформленное в виде исключения. Про чтение также, читать можно все что угодно только в этих областях памяти.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
30.08.2021, 10:27
Цитата Сообщение от viewrock Посмотреть сообщение
Едино добавить хочу, ну ведь в памяти то это единицы и нолики
В памяти это электрические заряды или направления намагниченности.
Тут вот некоторые упорно не понимают, что единица и ноль в электрической схеме прямого отношения к вычислительной машине не имеет. Это в электрическую схему можно влезть тестером и померить где какой уровень, ЭВМ же работает как черный ящик: вот входы, вот выходы, а все что между ними вас волновать не должно (потому что зависит от реализации, коих придумано немало).
Так и из памяти невозможно получить информации меньше, чем разрядность ее шины данных. Посмотрите устройство любой микросхемы памяти, например КР537РУ25.
Цитата Сообщение от viewrock Посмотреть сообщение
В силе остается вопрос про работу напрямую с памятью, есть ли такие возможности у С++.
Это не ограничение языка, это ограничение платформы. На современных мощных процессорах есть такая штука как виртуальная память, то есть адрес, которым оперирует ваша программа, не равен физическому адресу ячейки памяти.
Если вам хочется потыкать биты палочкой в ручном режиме, посмотрите в сторону микроконтроллеров. Например, AVR. Там виртуальной памяти нет, и работа идет именно с той ячейкой, которая записана в коде. Плюс работать с реальными адресами там просто необходимо, поскольку по ним располагаются порты ввода-вывода - то, через что ядро взаимодействует с внешним миром.
Это же я бы посоветовал и SmallEvil: самостоятельно потыкать регистры, память и инструкции камня. Убедиться, что минимальная единица информации - байт, а не бит. Реализовать сложение многобайтных чисел - то самое сложение в столбик, которое я приводил раньше.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.08.2021, 16:10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Убедиться, что минимальная единица информации - байт, а не бит
Минимально логическая единица информации в ПК - бит. И все завязано имено на битах.
Ваше заблуждение мне понятно, но не надо путать всех.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
ЭВМ же работает как черный ящик: вот входы, вот выходы, а все что между ними вас волновать не должно
Вот это Вас не волнует, и Вы упустили базовую суть. Знания, базовое, устройства и взаимодействия частей ПК дает большее понимание процессов происходящих в нм. Увы, Вы это отрицаете и пропускаете.
То что нет доступа к отдельному биту памяти, регистру, ячейке HDD - это архитектурное решение, никак не отрицает
того что ЭВМ и вся вычислительная техника на данный момент , работает с битами так или иначе.

Ваше , логическое представления, данных регистра ЦП как некую цифру - ничем не обосновано.
Но никто не запрещает вам так думать. Но учтите что всегда и езде вас не будут понимать.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
30.08.2021, 17:47
Цитата Сообщение от SmallEvil Посмотреть сообщение
Минимально логическая единица информации в ПК - бит.
Вы вообще не читаете что вам пишут? Ну давайте, покажите как получить i-й бит (i - переменная) без битовых операций.
Цитата Сообщение от SmallEvil Посмотреть сообщение
ЭВМ же работает как черный ящик
Вот это Вас не волнует
Ознакомьтесь уже с базовой терминологией. Что такое "черный ящик" и "слой абстракции" в том числе.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ваше , логическое представления, данных регистра ЦП как некую цифру - ничем не обосновано.
...кроме внутреннего устройства, наблюдаемого поведения и логики использования, разумеется. А, собственно, этого вам недостаточно?
0
 Аватар для qppq
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
31.08.2021, 08:42
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну давайте, покажите как получить i-й бит (i - переменная) без битовых операций.
другой вариант, надо прочитать второй бит переменной, зная ее адрес, но не считывая её всю
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
31.08.2021, 09:59
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main(){
  int x=1,n=0;
  int *p = &x;
  for(int i=32;i>=1;i--){
      if(n==8)cout<<" ",n=0;
      cout<<(*p >>(i-1)&1);
      n++;
  }
  return 0;
}
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
31.08.2021, 10:28
Цитата Сообщение от qppq Посмотреть сообщение
надо прочитать второй бит переменной, зная ее адрес
Не-не-не, у SmallEvil адресуется каждый бит, у него же двоичная система счисления. Правда, реальных машин с такой организацией я не припомню... но может и были.
0
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 57
20.09.2021, 11:44  [ТС]

че это было Пух?
0
20.09.2021, 11:52

Не по теме:

viewrock, то, что они не подрались - это уже хорошо :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2021, 11:52

Как присвоить переменной значение, взятое по определенному адресу?
Собственно у меня есть адрес (например, 010426D8), я знаю, что под этим адресом хранится целочисленное значение, как присвоить переменной...

Как получить координаты по адресу?
Здравствуйте. Помогите разобраться, есть небольшая система, построенная на картах. Нужно когда юзер введёт адрес в поле определить...

Image как двоичный код
Ребята есть код добавления картинку в базу MSAccess if (OpenPictureDialog1-&gt;Execute()) { ADOTable1-&gt;Edit(); ...

Получить двоичный код числа
Помогите, пожалуйста! Дано число типа Real, нужно извлечь из оперативной памяти его двоичный код

Как получить байты по заданному адресу?
Здравствуйте, такой вопрос, есть допустим процесс Game.exe, через Cheat Engine я нашёл нужный мне адрес, мне нужно посредством c# прочитать...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru