Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unsigned int независимо от архитектуры процессора, как представить? 
V
    Опции темы
Killer_13
Дата 26.4.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Язык программирования "С"

Значит, нужно проверить строку, и показать является ли введенная строка числом типа unsigned int.
Тип unsigned int должен функционировать независимо от архитектуры процессора.
насколько я знаю(читал) тим unsigned int это диапазон от "0" до "4294967295"
мне нужно только проверить, лежит ли мое число в этом диапазоне? Или как?

В предыдущей моей теме, мне подсказали, что максимальное значение unsigned int вычисляется

Код

unsigned n = 0u - 1;


другой человек подсказал

Код

unsigned n = 2147483648;



Если у меня в программе стоит
Код

unsigned int n = 4294967295;


говорит при компиляции "warning: this decimal constant is unsigned only in ISO C90"

Как же мне определить является ли моя строка числом типа unsigned int не зависимо от архитектуры процессора?

Спасибо.

Это сообщение отредактировал(а) Killer_13 - 26.4.2009, 17:06
PM MAIL   Вверх
GoldFinch
Дата 26.4.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



вместо 0u-1 лучше ~0
PM MAIL ICQ   Вверх
Killer_13
Дата 26.4.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



С кодом 
Код

unsigned int n=~0 ;


компилируется без ошибок, а как на счет моего вопроса?
PM MAIL   Вверх
GoldFinch
Дата 26.4.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



это должна функция преобразования строки в число определять
PM MAIL ICQ   Вверх
Killer_13
Дата 26.4.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



нет, у меня определяет - является ли строка числом, если является, мне нужно доказать(проверить), что это число, число типа unsigned int
PM MAIL   Вверх
Acer
Дата 26.4.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



unsigned int - это число в диапазоне от 0 до 65535

Добавлено через 4 минуты и 8 секунд
для независимости от процессора используй тип long и проверяй:
Код

long d;
if ( d >= 0 && d <= 65535 ){
    //unsigned int
}

PM MAIL   Вверх
Killer_13
Дата 26.4.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Тоисть можно написать так и это будет верно? smile

Код

long d;

.......
d=atol(z);//s - моя вводимая строка 

if ( d >= 0 && d <= 65535 )
    printf("\nunsigned int");
    else
    printf("\n НЕ unsigned int");


Спасибо за ответ.

Извините, "unsigned long" - опечатка 

Это сообщение отредактировал(а) Killer_13 - 26.4.2009, 19:51
PM MAIL   Вверх
Acer
Дата 26.4.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



это будет unsigned int, а не unsigned long.
long я рекомендовал использовать для того, чтобы не было зависимости от архитектуры.
Потому, что в 16-ти разрядной системе
Код

int b = 0xffff;
std::cout << b; // выведет на экран -1

а в 32-х разрядной это будет 65535
PM MAIL   Вверх
J0ker
Дата 26.4.2009, 20:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



курите стандарт:
Код

18.2.2 C Library [lib.c.limits]

1 Header <climits> (Table 16):

Table 16—Header <climits> synopsis

Values:
CHAR_BIT INT_MAX LONG_MIN SCHAR_MIN UCHAR_MAX USHRT_MAX
CHAR_MAX INT_MIN MB_LEN_MAX SHRT_MAX UINT_MAX
CHAR_MIN LONG_MAX SCHAR_MAX SHRT_MIN ULONG_MAX

2 The contents are the same as the Standard C library header <limits.h>.

3 Header <cfloat> (Table 17):

Table 17—Header <cfloat> synopsis

Values:
DBL_DIG DBL_MIN_EXP FLT_MIN_10_EXP LDBL_MAX_10_EXP
DBL_EPSILON FLT_DIG FLT_MIN_EXP LDBL_MAX_EXP
DBL_MANT_DIG FLT_EPSILON FLT_RADIX LDBL_MIN
DBL_MAX FLT_MANT_DIG FLT_ROUNDS LDBL_MIN_10_EXP
DBL_MAX_10_EXP FLT_MAX LDBL_DIG LDBL_MIN_EXP
DBL_MAX_EXP FLT_MAX_10_EXP LDBL_EPSILON
DBL_MIN FLT_MAX_EXP LDBL_MANT_DIG
DBL_MIN_10_EXP FLT_MIN LDBL_MAX

4 The contents are the same as the Standard C library header <float.h>.




--------------------
user posted image
PM MAIL   Вверх
Cheloveck
Дата 26.4.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Цитата

мне нужно только проверить, лежит ли мое число в этом диапазоне? Или как?

да, так. Получается, что тебе надо сравнивать не с unsigned long, а с 4-мя байтами, а это константа. Если нужно сравнить с максимальным значением в данной архитектуре, то можно воспользоваться стандартом, который любезно сюда кинул J0ker - ULONG_MAX или же с этим
Код

unsigned long max_long = -1; // именно минус один.
 

Это сообщение отредактировал(а) Cheloveck - 26.4.2009, 21:08


--------------------
user posted image
PM Jabber   Вверх
math64
Дата 27.4.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Для задания константы типа unsigned добавьте U в конце, для константы типа long - L, long long (компилятор gcc) - LL.
Макимальные и минимальные значения приведены в файле <limits.s>.
На 
Код

unsigned long max_long = -1;

компилятор может выругаться: -1 вне диапазона допустимых значений для unsigned long
Код

unsigned long max_long = -1UL;


PM   Вверх
bsa
Дата 27.4.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
usnigned int x;
char txt1[50], txt2[50];
scanf("%50s", txt1);
sscanf(txt1, "%u", &x);
snprintf(txt2, 50, "%u", x);
if (strcmp(txt1, txt2) == 0)
   printf("число допустимо для данной архитектуры");
else
   printf("число недопустимо для данной архитектуры");

PM   Вверх
xvr
Дата 27.4.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(bsa @ 27.4.2009,  13:47)
Код
usnigned int x;
char txt1[50], txt2[50];
scanf("%50s", txt1);
sscanf(txt1, "%u", &x);
snprintf(txt2, 50, "%u", x);
if (strcmp(txt1, txt2) == 0)
   printf("число допустимо для данной архитектуры");
else
   printf("число недопустимо для данной архитектуры");

Не сработает, если в исходной строке будут лидирующие нули

PM MAIL   Вверх
bsa
Дата 27.4.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



xvr, а еще не сработает, если там будут левые символы - я дал концепцию, а защита от дурака не моя забота  smile 
PM   Вверх
math64
Дата 28.4.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

int n;
unsigned int x;
for(n=0,x=1;x != 0; x <<= 1, n++);
printf("unsigned int has %d bits\n",n);

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.