LINUX.ORG.RU

Знаковый и безнаковый тип?

 ,


0

1

Объясните пожалуйста! Изучаю Си. Я немного не понимаю, чем отличается знаковый тип от безнакового? Знаковый тип это:

1) short, int от –32 767 до 32 767?
2) Или наборот unsigned short, unsigned int от 0 до 65 535?



Последнее исправление: Hufoc (всего исправлений: 1)

Знаковый — это у которого знак (+/-) есть. Беззнаковый — это у которого нет.

arturpub ★★
()

Знаковый (signed) — у чисел важен знак — плюс или минус, то есть числа могут быть как отрицательные, так и положительные и, соответственно, могут быть меньше нуля.

Беззнаковый (unsigned) — числа всегда положительные и не могут быть меньше нуля, таким образом, при вычитании единицы из нуля мы получим, для short, 65535, а не -1.

А на самом деле компьютеру вообще пофиг, ну, может только при делении/умножении другие инструкции используются. Ты можешь попробовать «привести» беззнаковый тип к знаковому и проверить какие будут значения для чисел больше 32767. Это интересно.

#include <stdio.h>

int main() {
    signed short A = -1;
    unsigned short B = 65535;
    
    printf("+Signed (A) to unsigned: %i\n", (unsigned short)A);
    printf("Unsigned (B) to +signed: %i\n", (signed short)B);
}

В каком бите хранится знак числа?

anonymous
()

1) short, int от –32 767 до 32 767?

Отрицательных чисел обычно на 1 больше чем положительных (-32768) потому что https://en.wikipedia.org/wiki/Two's_complement

И int почти везде 32-битный, т.е. от -2147483648 до 2147483647

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)

Я немного не понимаю, чем отличается знаковый тип от безнакового

как интерпритируется(тут тебе стоит разобратся кем/чем) битовая строка заданного некоторого(|одно)байтного размера.

---- отношением порядка

у безнакового бит.строка все нули наименьшее - у знакового(для случая доп кода) все единицы(то что безнакового обычно есть представление максимального)

--------------------

расмотри случай четырёхбитовых чисел - представь циферблат часов с 16 разными главными делениями - у безнаковых переход даты в полночь ( 16(0)) у знаковых в полдень 8(-8)

---------------------

см любую конечную арифметику (вычеты???)

qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 1)

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

unt1tled ★★★★
()
Ответ на: комментарий от qulinxao

как интерпритируется(тут тебе стоит разобратся кем/чем) битовая строка задан ...

qulinxao никогда не работай преподователем, тебя никто, никогда не поймёт. Ты не умеешь излагать на разговорном языке.

anonymous
()
Ответ на: комментарий от Esteban_Garcia

В каком современном языке нет различий между знаковыми и беззнаковыми числами? JavaScript?

Чувак был задан вопрос о том, где в каком универе преподают этот древний язык. А о наличиях и отсутствях типов в современных ЯП никто не интересовался.

Эст-еблан Гарсия учись логически мыслить.

anonymous
()
Ответ на: комментарий от anonymous

логически мыслить.

В каком месте ты вообще увидел здесь логическое мышление. Более того, тебе не следовало задавать этот вопрос.

Esteban_Garcia
()
Ответ на: комментарий от Esteban_Garcia

В каком месте ты вообще увидел здесь логическое мышление.

У тебя с головой всё в порядке?

Более того, тебе не следовало задавать этот вопрос.

Почему же, интересено в каком таком универе преподают этот древний язык.

anonymous
()

В си целые числа по умолчанию знаковые. Беззнаковые нужно объявлять особо. Многие считают это решение странным и сомнительным. Ведь диапазон 0 … 2^n-1 намного предпочтительнее с философской точки зрения.

Deleted
()

Спасибо большое всем, те кто постарался ответить!

Hufoc
() автор топика
Ответ на: комментарий от Esteban_Garcia

В каком современном языке нет различий между знаковыми и беззнаковыми числами? JavaScript?

java

unt1tled ★★★★
()

см. Алгоритмические трюки для программистов Генри Уоррен, мл

 глава 1
ВВЕДЕНИЕ

1.1 Система обозначений

   Повсюду в книге при описании машинных команд используются выражения, отличающиеся от обычных арифметических выражений. В «компьютерной арифметике» операнды представляют собой битовые строки (или векторы) некоторой фиксированной длины. Выражения компьютерной арифметики похожи на выражения обычной арифметики, но в этом случае переменные обозначают содержимое регистров компьютера. Значение выражения компьютерной арифметики представляют собой строку битов без какой-либо специальной интерпретации; операнды же могут интерпретироваться по-разному. Например, в команде сравнения операнды интерпретируются либо как двоичные целые числа со знаком, либо как беззнаковые целые числа. Поэтому, в зависимости от типа операндов, для обозначения оператора сравнения используются разные символы.

ps. в последнем путаном предложении цитаты можно заметить что тип операнда это метаданное а не данное что часть операнда в целом . :)

удачи.

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.