169 похожих чатов

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

плюс, а когда только плюс ? то есть есть у нас один байт, если мы хотим хранить в нем числа в диапазоне от -128 до 127 у нас учитывается самый старший бит, если старший бит 0 то число положительное, 1 отрицательное, а если я знаю что я не буду хранить в этом байте отрицательные числа, и не нужно учитывать старший байт, чтобы можно было хранить много положительных чисел, от 0 до 255, то как это сказать компьютеру ?

58 ответов

133 просмотра

Компьютер не знает вообще про отрицательные и положительные. И вообще, ты можешь оперировать с беззнаковым, но спокойно выводить это везде как отрицательное число. То есть, вот тебе и -255.

123- Автор вопроса
КТ315
Компьютер не знает вообще про отрицательные и поло...

А как тогда при арифметических операций, компьютер "различает" что положительное а что отрицательное, и на выходе дает разные значения, например 5 + 5 = 10, а 5 + -5 = 0 ? ведь всю арифметику делает процессор.

123
А как тогда при арифметических операций, компьютер...

Ты сам это написал - по верхним битам. Но это можно и игнорировать.

123- Автор вопроса
КТ315
Ты сам это написал - по верхним битам. Но это можн...

И как компиляторы или интерпретаторы на самом низком, двоичном уровне говорят компьютеру, игнорировать или не игнорировать ?

123
И как компиляторы или интерпретаторы на самом низк...

Ты шутишь? Никак! Это абстракция. Какая разница, что там в верхних битах? Ты решаешь, что это за значение.

123- Автор вопроса
КТ315
Ты шутишь? Никак! Это абстракция. Какая разница, ч...

Я это и спрашиваю, решаю я, значение минус или плюс, но как это решение донести до процессора, чтобы при сложении, вычитания или других арифметических операциях, он правильно считал, чтобы правильно считать -5 - 2 нужно различать отрицательное число, от положительного, чтобы получилось -7 а не 3

123
И как компиляторы или интерпретаторы на самом низк...

погоняй в калькуляторе примеры, или в дебаггере. все нюансы знаковой-беззнаковой арифметики уточнишь

123
Я это и спрашиваю, решаю я, значение минус или плю...

для обычных операций такого не нужно. mul выполняет беззнаковое перемножение операнда и аккумулятора. imul выполняет знаковое перемножение операндов. div производит беззнаковое деление аккумулятора на операнд. idiv выполняет знаковое деление аккумулятора на операнд.

Компьютеру не надо говорить о том, что числа знаковые или беззнаковые. Знак числа у тебя исключительно в голове

123
Я это и спрашиваю, решаю я, значение минус или плю...

У тебя есть инструкции neg для превращения отрицательного в положительное, и положительное в отрицательное. Используешь их для получения нужного значения.

123- Автор вопроса

Мой первый вопрос немного отличается от тех что после, просто говоря, как хранить положительное число 255 в одном байте ?

123- Автор вопроса
123
Мой первый вопрос немного отличается от тех что по...

И не только 255, положительные числа больше 127

123
И не только 255, положительные числа больше 127

Вот только байт не может хранить знаковое число больше 127

123
И не только 255, положительные числа больше 127

FFFFFFF1 = -15, при этом 4294967281. add eax, 1 ; FFFFFFF2 = -14, при этом 4294967282. Вот тебе и положительное, вот тебе и отрицательное. Так?

123- Автор вопроса
КТ315
0xFF = 255. Положительное?

Как компьютеру понять, число 10000011 это 1*2^8 + 0*2^7 ... + 1*2^1 + 1*2^0 или - (0*2^7 ... + 1*2^1 + 1*2^0) чтобы при арифметических - и + ответ был верным ?

123
Как компьютеру понять, число 10000011 это 1*2^8 + ...

Никак. Ответ и так будет верным, смотри выше.

123- Автор вопроса
The Bird of Hermes
Вот только байт не может хранить знаковое число бо...

Знаковое да, а беззнаковое, где граниться между знаковым, и без знаковым ?

123
Как компьютеру понять, число 10000011 это 1*2^8 + ...

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

123
Как компьютеру понять, число 10000011 это 1*2^8 + ...

проблемы при умножении, для знаковых коррекция нужна, про деление не помню

123- Автор вопроса
The Bird of Hermes
При операциях сложения и вычитания результат не за...

Если пк плевать на знаковое число, или не знаковое, то -2 + 1 это 3 а не 1

КТ315
Коррекция? imul/idiv просто писать, и всё.

Ну это видимо под коррекцией и подразумевается

КТ315
Коррекция? imul/idiv просто писать, и всё.

я про абстрактый сферический ассемблер в вакууме

123- Автор вопроса
The Bird of Hermes
Без знаковое 2 не равно знаковому -2

Вот и вопрос, где граница между -2 и 2 ?

123- Автор вопроса
КТ315
Это какой?

когда нет умножения/деления, например

123
Вот и вопрос, где граница между -2 и 2 ?

-2 в беззнаковом виде равно 254, если мы говорим о байте

The Bird of Hermes
-2 в беззнаковом виде равно 254, если мы говорим о...

Соответственно, когда ты прибавишь к нему 1, ты получишь 255 - что соответствует знаковому -1

The Bird of Hermes
Соответственно, когда ты прибавишь к нему 1, ты по...

Но при этом это всегда можно и интерпретировать как 255.

КТ315
Это какой-нибудь ARM?

вроде армы все с умножениями и делениями, я про 8-битные

123- Автор вопроса
The Bird of Hermes
Вот только байт не может хранить знаковое число бо...

Пк не нужно знать число с знаком или без, но знаковое число больше 127 нельзя хранить в одном байте ? где логика ? как пк понять что 10000001 это не -1 а большое беззнаковое число, чтобы использовать его в арифметике не как -1 а как то самое большое положительное число ?

123
Пк не нужно знать число с знаком или без, но знако...

У тебя есть 8 ячеек, каждая из которых может хранить число 0 или 1

123
Пк не нужно знать число с знаком или без, но знако...

Короче, садись за калькулятор и смотри. Всё поймёшь.

123
Пк не нужно знать число с знаком или без, но знако...

Базовые арифметические операции - сложение и вычитание - делаются так, что абсолютно не важно, будут они производиться над знаковыми или без знаковыми числом.

123- Автор вопроса
123
Пк не нужно знать число с знаком или без, но знако...

Ну потому что 10000001 это не -1 вообще ни разу.

Aiwan \ (•◡•) / _bot
записываешь туда или -1 или 255

Западло в том, что при записывании -1 - пишется почему-то 255. В чём же дело...

123
Пк не нужно знать число с знаком или без, но знако...

никак, формат отрицательных чисел и придумали чтоб в бинарном формате сложение/вычитаение делались по одному алгоритму

КТ315
Западло в том, что при записывании -1 - пишется по...

где пишется, кем пишется, что пишется?

Aiwan \ (•◡•) / _bot
где пишется, кем пишется, что пишется?

Ассемблером, отладчиком и т.д. Это я про то, что все отрицательные - и есть положительные, и часть положительных - и есть отрицательные.

КТ315
А что там?

в душе не знаю, но думаю там никогда не всплывают такие вопросы "Как компьютеру понять, число 10000011 это 1*2^8 + 0*2^7 ... + 1*2^1 + 1*2^0 или - (0*2^7 ... + 1*2^1 + 1*2^0) чтобы при арифметических - и + ответ был верным ?"

Aiwan \ (•◡•) / _bot
в душе не знаю, но думаю там никогда не всплывают ...

Да в ассемблере тоже бы не всплывали, просто запутался человек между тремя берёзами. Чего тут понимать? sub/add и так работают - потому что отрицательные расположены в таком порядке (от меньшего к большему), что получается при сложении\вычитании - можно часть положительных всегда интерпретировать как отрицательные. И если надо знаковое число, а не адрес - делаешь idiv/imul, а не div/mul. Так начал же придумывать какие-то ненормальные вычисления, степени, что-то там размышлять про отдельные числа...

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта