Каким образом происходит такое преобразование, если предположить что тип char занимает 1 байт (0...255)
unsigned char a;
a = -1;
Стандарт гарантирует такое преобразование?
Другие языки программирования и технологии
С++ преобразование отрицательных чисел в беззнаковый тип
255 получится
char - 8 бит, из них 1 идет под знак
-1 в двоичной записи будет 11111111 (дополнительный код)
у unsigned cgar используются все 8 бит (нет знака), а значит, 11111111 превращается в 255
char - 8 бит, из них 1 идет под знак
-1 в двоичной записи будет 11111111 (дополнительный код)
у unsigned cgar используются все 8 бит (нет знака), а значит, 11111111 превращается в 255
Андрей Кравченко
Дополнительный код.. точно, спасибо
В бинарном представлении -1 для signed char и unsigned char будет представлен одинаково: 11111111
В знаковых типах данных нулевой разряд (первый слева) отдан под знак, где 1 означает отрицательное значение, а 0 - положительное. По умолчанию все целочисленные константы имеют тип данных int, который зависит от платформы. Это следует учитывать при явном и неявном преобразовании.
В знаковых типах данных нулевой разряд (первый слева) отдан под знак, где 1 означает отрицательное значение, а 0 - положительное. По умолчанию все целочисленные константы имеют тип данных int, который зависит от платформы. Это следует учитывать при явном и неявном преобразовании.
Андрей Кравченко
Т. е. в знаковых типах отрицательные числа тоже записываются в дополнительном коде?
Просто раньше думал что -1 в знаковом это 1000 0001
Просто раньше думал что -1 в знаковом это 1000 0001
Согласно документу N3242=11-0012, р. 4.7 п. 2 If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2^n where n is the number of bits used to represent the unsigned type).
Т. е. там будет 255. Простое преобразование в дополнительном коде.
Т. е. там будет 255. Простое преобразование в дополнительном коде.
Произойдет неявное преобразование (-1) к unsigned char, комплитятор может ругнуться ворнингами, на всякий случай всегда пиши так: a=(unsigned char)(-1);
Андрей Кравченко
Значение какое будет? В учебнике написано 255, но как так происходит я не понимаю.
Преобразование следующее: для того, чтобы сменить знак у числа, нужно инвертировать все его биты (то есть 0 поменять на 1, а 1 на 0) и затем прибавить 1. К примеру: число 1 размеров в байт. Хотим сделать его отрицательным. В двоичной системе счисления 1 — это 00000001. Инвертируем: получается 11111110. Прибавляем 1, выходит 11111111. Это и есть -1. А если представить его в беззнаковом виде? То это число 255! Если число отрицательное, перевод происходит также.
Похожие вопросы
- Как определить отрицательные числа?
- Особенности арифметических операций в C++, деление отрицательных чисел, вопрос ниже
- При делении отрицательного числа выводит не правильный ответ (assembler). Если беру числа 127 13 10, пишет переполнение
- Деление отрицательного числа. Ассемблер
- Число ноль это положительное или отрицательное число.
- Отрицательные числа и дополнительный код
- НА C# НАПИСАТЬ КОД Найти сумму целых отрицательных чисел, кратных 5 и принадлежащих интервалу [-20; 20].
- Дан целочисленный двумерный массив, размерности n х m. Заменить все отрицательные числа нулем
- Даны 3 целых числа. Возвести в квадрат отрицательные числа и в третью степень - положительные (число 0 не изменять)
- Помогите найти все возможные вариации положительных и отрицательных чисел в массиве.