C/C++

Как компьютер определяет что в памяти записано знаковое или беззнаковое число?

Если я захочу вывести на экран число из ячейки памяти, то как компьютер узнает что нужно отобразить -1, а не 255? При этом оба эти числа записываются в памяти как 1111 1111.
SA
Sabit Ainamkulov
123
Как написано в программе в преобразовании числа в текст, так и определяет. Тип хранится не в ячейке, а указывается в коде команды (знаковое умножение и беззнаковое умножение имеют разные коды команд и т. п.)
Мерей Алкешов
Мерей Алкешов
81 774
Лучший ответ
Он об этом узнает из команд программы.
ты ему сам скажешь, как интерпретировать эти единицы.

char c = 0xFF;

// как символ:
printf("as char: %c\n", c);

// как целое со знаком:
printf("as int: %hhd\n", c);

// как целое без знака:
printf("as unsigned int: %hhu\n", c);
Sabit Ainamkulov int var = 255; // запишется в памяти как 1111 1111
int var2 = -1; // запишется в памяти как 1111 111
Ладно, возьмем С. Там мы пишем printf("%d, %d", var, var2); и результат будет 255, -1. Как программа определила что var и var2 имеют разные знаки, если в памяти они хранились 1111 1111?
Тебе же блин ответили!
Для языка си
unsigned char a; // это без знака выведет, а значит 255 покажет или 0xFF для шестнадцетеричного
char a; // покажет -1
Sabit Ainamkulov При чем тут вообще любой ЯП? Это на ассемблере можно все сделать.
Какие символы или цифры отобразить решает программа, которую ты запускаешь. Для неё нет разницы, число там или текст. В программе все в единицах и нулях. Но тот, кто пишет программу определяет способ представления информации конечному пользователю.
Олег Ахметов
Олег Ахметов
77 935
Не мож быть, тем более что комбинация из 8 цифр даст больше чем 255
Артём Марков
Артём Марков
65 181
Я бы тоже хотел узнать.
Всё что знаю по этому поводу - компьютер использует дополнительный код.
Это когда реверсируешь число и добавляешь единицу.
Есть ещё предположение, что он для этого специальные знаки типа мантиссы использует
ББ
Борис Бицаев
23 077
со времён бейсика переменные объявлялись спецификатором, в котором указывался тип переменной - int, double, string и далее следовал идентификатор. По-любому идентификатор превращался в адрес хранения ПЕРВОЙ ячейки памяти, а вот по спецификатору программа понимает, что работать нужно с 4, 8 или строкой из стольких байт, сколько указазал для размера строковой переменной "программист" )))
Sharip Yarov
Sharip Yarov
21 700
Sharip Yarov ищите, точнее обращайтесь к истокам программирования в частности описание языка бейсик и там пользователям доходчиво объяснялось КАК расположены переменные технически в памяти, что и сколько занимают. Про уточнение имён переменных не говорю, там еще посложнее ))
Sharip Yarov ищите книги 80-х и 90-х годов. Многие программисты из молодых даже представление не имеют как оно работает в принципе

Похожие вопросы