Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 5
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Что происходит в памяти компьютера?
14:52
Что происходит в памяти компьютера?
Иногда мы бездумно объявляем переменные и не понимаем - как, где и зачем они хранятся в памяти компьютера.Приведу пример из учебника информатики. Целое число хранится в 1-4 байтах (в зависимости от типа данных), при этом, если число со знаком, то первый старший бит отводится под знак. Итак, возьмем число 5 типа Integer (4 байта в среде FreePascal, так как этот тип здесь имеет значение longint). Получим следующий вид в битах:00000000 00000000 00000000 00000101  - в двоичной системе счисления   00       00       00      05      -  в 16-тиричной системе счисленияЕсли это -5, то сделаем операцию инвертирования11111111 11111111 11111111 11111010  и прибавим 1:11111111 11111111 11111111 11111011  - в двоичной системе счисления           FF                  FF               FF                  FB            - в 16-тиричной системе счисленияПопробуем получить это число с помощью программы на Паскале. Для этого будем использовать типизированные файлы:var f: file of integer;      i:integer;begin  assign(f,'int.dat');rewrite(f);   ыяяя".Итак, чтоже мы видим? Первые нули до двоеточия показывают начало отсчета в памяти компьютера, т.е. адрес начинается с нуля. Далее идут числа в 16-тиричной записи по 2 цифры в каждом числе (2*4 бита для каждой цифры в 16-тиричной системе счисления=8 real.dat');rewrite(f);  %d %d\n",a, *c); /*вывод переменной a и значение в ячейке памяти по указателю *с */   printf("%d %d\n",b, *(c-1));/* вывод переменной b и значение в ячейке памяти по указателю *с со сдвигом на 1 ячейку памяти "вверх", т.е. к значению переменной b.*/   printf("%d\n",*(c+1)); /* в этом случае мы сдвинемся вниз и получим из памяти "мусор".*/   return 0;}Из примера видно, что все динамические переменные, строки без заданной длины или массивы лучше описывать в конце списка описания переменных.Задача: подсчитать количество слов в строке, заканчивающейся точкой. Каждое слово разделено одним пробелом. Строка может быть очень длинной и без указателя не обойтись.#include <stdio.h>#include <stdlib.h>int main(){int n, k, i; char *b, a;//важно именно в таком порядке записать переменные!scanf("%c", )//Именно минус, чтобы идти вверх по пирамиде{ ++i; scanf("%c", *(b-i)); if ) k++; } printf("\n %c",*(b-i));   return 0;} Так без объявления размера для динамического массива символов мы ввели все символы в память и вывели, зная только начало адреса ячейки памяти. Количество символов будет равно количеству сдвигов. Этот пример можно использовать для ввода строк неизвестной длинны. Если строки заканчиваются по клавише перехода на новую строку (Enter), то проверяем по коду 10: %c", *(b-i));и можно дальше считывать следующую строчку символов.Обошлись без дополнительных библиотек и функций. Это пока все, что я узнала о памяти и готова поделится с Вами.
Просмотров: 129 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей