Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
1

Как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть 11111111

29.08.2012, 22:41. Показов 4605. Ответов 23
Метки нет (Все метки)

Добрый вечер! ломаю голову над тем, как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть 11111111, а чему же тогда равно -128 в binary?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2012, 22:41
Ответы с готовыми решениями:

8-битовый тип signed char может представлять значения от -128 до 127
8-битовый тип signed char может представлять значения от -128 до 127 Кто может растолковать...

Как 127.0.0.1/index.phtml сделать 127.0.0.1?
Здравствуйте, установила апач и пхп на линукс все работает, но что-то не настроено, объясните...

Integer 127 & 128 - как и почему это происходит?
Всем привет! Вот уже неделю ломаю голову над не сложным проектом, в котором в одном месте...

ROUTE Удалил 127.0.0.1, затем добавил 127.0.0.1, и не работает ! Почему ?
Доброго времени ! Разбираюсь с IP маршрутизацией на Windows 7 и столкнулся с такой проблемой....

23
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
29.08.2012, 22:43 2
-128 и не входит
диапозон -127,0,+127
Bash
1
2
3
4
5
- 127  - 11111111
- 1    - 10000001
  0    - 00000000
  1    - 00000001
  127  - 01111111
1
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
29.08.2012, 22:46  [ТС] 3
Спасибо. Знакомый недавно упорно доказывал что во все signed входит отрицательное число равное числу старшего бита
0
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
29.08.2012, 22:48 4
alex_x_x, да ты что? Загляни сюда тогда.
1
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
29.08.2012, 22:51 5
Цитата Сообщение от Veyron Посмотреть сообщение
alex_x_x, да ты что? Загляни сюда тогда.
ну да, иначе был бы +0 и -0
0
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.08.2012, 22:52 6
Мало того, что 1111 1111 это не -127, а -1, -128 входит в этот диапазон и представляется значением 1000 0000.
Чтобы получить преобразовать дополнительный код в прямой, нужно проинвертировать все биты в абсолютном значении числа и прибавить единицу
0
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
29.08.2012, 22:53 7
h3mbr0, пример в Вашем первом посте демонстрирует другой формат представления данных (прямой код со знаковым битом). На практике используют дополнительный код, так как удобно складывать отрицательные и положительные числа в этом случае.
1
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.08.2012, 22:57 8
ломаю голову над тем, как в signed char помещается диапазон -128,127
А в чем проблема? char представляет 256 различных значений, диапазон -128;127 содержит ровно 256 различных значений. А -127;127 только 255.
1
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
29.08.2012, 23:00  [ТС] 9
Цитата Сообщение от Veyron Посмотреть сообщение
h3mbr0, пример в Вашем первом посте демонстрирует другой формат представления данных (прямой код со знаковым битом). На практике используют дополнительный код, так как удобно складывать отрицательные и положительные числа в этом случае.
Можно поподробнее? никогда с битами не встречался, но ведь программист не умеющий работать с битами не программист, вот я и решил за них взяться, из того что вычитал - знаю только о таком представлении

Добавлено через 2 минуты
Использую такой код для вычисления двоичного числа:
C++
1
2
3
4
5
6
7
8
9
template<typename T>
void dec2bin(const T &d)
{
    d<0 && exit(1);
    cout << "\ndec - " << short(d) << "\nbin - ";
    for (int i=sizeof(T)*8-1; i>=0; i--)
        cout << (d>>i)%2;
    cout << endl;
}
правда работает он только с unsigned. А как представить то же число в дополнительном коде?
0
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
29.08.2012, 23:12 10
h3mbr0, все положительные числа и ноль в любом коде выглядят одинаково.
В прямом коде отрицательное число - положительное число со знаковым битом.
В обратном коде отрицательное число - дополнение до положительного (обращаем все биты).
В дополнительном коде отрицательное число - дополнение до положительного плюс единица.

Подробнее можно почитать в интернете, конкретно в википедии статьи о прямом, обратном и дополнительном коде.
1
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
29.08.2012, 23:25  [ТС] 11
Цитата Сообщение от Veyron Посмотреть сообщение
h3mbr0, все положительные числа и ноль в любом коде выглядят одинаково.
В прямом коде отрицательное число - положительное число со знаковым битом.
В обратном коде отрицательное число - дополнение до положительного (обращаем все биты).
В дополнительном коде отрицательное число - дополнение до положительного плюс единица.

Подробнее можно почитать в интернете, конкретно в википедии статьи о прямом, обратном и дополнительном коде.
Спасибо за пояснение. А есть способ распечатать число в этом самом дополнительном коде?
0
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.08.2012, 23:33 12
все signed типы хранятся в дополнительном коде, нужно лишь вывести их побитно.
1
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
29.08.2012, 23:38  [ТС] 13
Цитата Сообщение от Герц Посмотреть сообщение
все signed типы хранятся в дополнительном коде, нужно лишь вывести их побитно.
Меня и интересует как вывести их побитно)
0
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
29.08.2012, 23:50 14
C++
1
2
3
4
5
    int a = -2;
    for ( int i = 8 * sizeof( a ) - 1; i >= 0; --i ) {
        std::cout << ( ( a >> i ) & 1 );
    }
    return 0;
2
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.08.2012, 00:59 15
C++
1
2
3
4
5
6
7
8
9
10
#include <bitset>
#include <iostream>
 
template <typename T> void print (const T& value) {
  std::cout << std::bitset<sizeof(T) * 8> (value) << std::endl;
}
 
int main () {
  print ((signed char)-127);
}
правда я не уверен насчет стандартности

Добавлено через 1 минуту
не, таки есть
template <class charT, class traits, size_t N>
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>& os, const bitset<N>& x);
1
-=ЮрА=-
30.08.2012, 01:27
  #16

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
-128 и не входит
диапозон -127,0,+127
Код Bash
- 127 *- 11111111
- 1 * *- 10000001
* 0 * *- 00000000
* 1 * *- 00000001
* 127 *- 01111111
- calc.exe считает 11111111 как 255 (так просто к слову)
Немножко не в ту степь, но для прикола сойдёт
http://liveworkspace.org/code/... 8f8b36cb76

0
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
30.08.2012, 01:33 17
Дело в том, что у calc'a 64-битное целое, поэтому чтобы получить -1 надо ввести 64 двоичных единицы.
А теперь попробуйте ввести -1 в десятичной системе счисления и посмотрите на результат - там будут те же самые 11111111 (с поправкой на разрядность целочисленного типа, у калькулятора 8-байтовые целые, а мы тут говорили об однобайтовых char'ах).
0
-=ЮрА=-
30.08.2012, 01:43
  #18

Не по теме:

Герц,

Цитата Сообщение от Герц Посмотреть сообщение
А теперь попробуйте ввести -1 в десятичной системе счисления и посмотрите на результат - там будут те же самые 11111111
-1 в бинарке от calc.exe
111111111111111111111111111111111111111111111111111111111111 1111

0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.08.2012, 01:46 19
-=ЮрА=-, так это к началу темы (то о чем я уже позабыл) - есть разные формы представления отрицательных двоичных чисел
0
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
30.08.2012, 02:08 20
-=ЮрА=-, то что в скобках написано ты видимо не прочел?
Выбери "1 байт" чекбокс в левом нижнем углу калькулятора.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2012, 02:08

Помощь в написании контрольных, курсовых и дипломных работ здесь.

На промежутке от -128 до 127 подсчитать пар чисел, удовлетворяющих условию
Здравствуйте. Я плохо дружу с ассемблером. Код на задачу нашел здесь на форуме, но не совсем смог...

Char с кодом > 127 в Interbase и JBuilder
У меня такая задача надо записать массив байтов в табличку. при этом содержимое массив - набор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.