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