Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Что такое UINT?


Автор: Guest_Dead Moroz 9.4.2003, 17:42
По идее массив, по практике инт, а вообще что-то возвращает только при сравнении...

Автор: Alex101 9.4.2003, 18:52
Это unsigned int, а уж что по идее и на практике RTFM smile.gif

Автор: Step 9.4.2003, 19:23
беззнаковый инт

Автор: Voker57 10.4.2003, 14:45
Цитата(Guest_Dead @ 9.4.2003, 09:42)
По идее массив, по практике инт, а вообще что-то возвращает только при сравнении...

Это я.
Что значит беззнаковый? Как к нему обращаться?

Автор: -=Baa=-F; 10.4.2003, 15:55
UINT uTest = 0;
uTest = 0xFFF

Автор: Step 10.4.2003, 17:14
Цитата
Как к нему обращаться?
так же как и к инту

Автор: Alex101 10.4.2003, 20:54
Цитата(Voker57 @ 10.4.2003, 11:45)
Что значит беззнаковый? Как к нему обращаться?

Это такой же тип данных, что и int, только в объектах этого типа не могут храниться отрицательные числа - только целые положительные.

Автор: simanyay 11.4.2003, 10:48
UINT это unsigned int, т.е. значения данного целого числа не могут быть отрицательными.

Автор: Step 11.4.2003, 11:21
инт это 64 бита, и уинт тоже 64 бита, только первый это с отрицательным поддиапозоном, и уинт только положительний диапозон

Автор: Baa 11.4.2003, 11:25
Step, вот незадача smile.gif а я всегда считал, что инт - это 32 бита wink.gif
Код

CString str;
   str.Format ("%d", sizeof (int)*8);
   AfxMessageBox (str);

Автор: Step 11.4.2003, 11:32
Baa наверное ты прав, я просто ошибся, а ведь зная что от 0 до 65535

Автор: Alex101 11.4.2003, 17:04
Цитата(Step @ 11.4.2003, 08:32)
а ведь знал что от 0 до 65535

Это 16-и битный инт. В ДОСовских компиляторах такой и был.

Автор: Voker57 11.4.2003, 18:51
Да в том то и дело, что он в заглавии функции в которой он мне нужен он типа CHAR
Вот так:
Код
void CTwsView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

Автор: brb 12.4.2003, 00:51
Step
Цитата
инт это 64 бита, и уинт тоже 64 бита
Ты не прав!!! Чтобы узать размер надо воспользоваться sizeof(UINT), а утверждать, что это 64 бита некорректно!
И неправ еще раз:
Цитата
Baa наверное ты прав, я просто ошибся, а ведь зная что от 0 до 65535

потому что 65к это 16 бит!

Автор: Step 15.4.2003, 15:31
brb короче я точно знаяю что инт и юинт одинаковое количество бит

Автор: Voker57 15.4.2003, 18:06
А всё-таки КАК к нему-CHARу обращаться
baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif baaa.gif

Автор: Step 15.4.2003, 18:10
[QUOTE]Да в том то и дело, что он в заглавии функции в которой он мне нужен он типа CHAR
Вот так:[QUOTE]
void CTwsView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) [/QUOTE]
да вот так и обращаться

nChar=5;
или
if (nChar==5)....


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

Автор: Voker57 16.4.2003, 14:50
Цитата
nChar=5; или if(nChar==5)

Ага, а если надо его сравнить с символом в буквенном виде а не в цифровом

Автор: Step 16.4.2003, 15:26
char * a;
a= (char*)(&nChar)
if( *a=='s')


что-то вроде этого

Автор: Baa 16.4.2003, 15:40
if ((char)nChar == 's')...

Автор: Step 16.4.2003, 15:43
Baa ты думаеш он сможет 4 байтовую переменную в однобайтовую конвертирова

Автор: Baa 16.4.2003, 15:55
я не думаю, я знаю... более того, прокатит даже так:
Код

UINT nChar = 'A';
//cmp         dword ptr [nChar],41h
if (nChar == 'A') printf ("Test");

Автор: Step 16.4.2003, 18:59
а ты с интом такую штуку не проварачивал.

Автор: brb 17.4.2003, 04:11
Step,
Отнюдь! unsigned не имеет знакового бита, а int имеет. Но, sizeof() действительно возвращает одно и тоже.

Автор: Step 17.4.2003, 10:46
вопрос вобщето в том где этот бит распологается....

Автор: DENNN 17.4.2003, 11:37
Цитата
вопрос вобщето в том где этот бит распологается....

Ну вот, приехали smile.gif Вроде в C ничего не меняли и работаею как и в асме.

Автор: Step 17.4.2003, 11:48
DENNN да я просто никогда об этом не задумывался хотя подозреваю что бит должен находиться справа

Автор: DENNN 17.4.2003, 11:55
А как двухбайтовое число в памяти располагается тоже не задумывался? smile.gif smile.gif

Автор: Step 17.4.2003, 12:00
нет это я знаю как ни как когдато на асме писал, а вот о знаков бите не задумывался просто потому что это для процессора было прозрачно, если подумать то можно и додуматься


старший байт спереди младщий сзади, это я еще при изучении асма на зет 80 усвоил

Автор: DENNN 17.4.2003, 12:05
Тоже с Z80 начинал? Классная была вещица.
А знаковый бит везде одинаков: в однобайтовом числе это самый старший бит.

Автор: Step 17.4.2003, 12:17
Z80 - рулезззз....

Автор: Gannibal 17.4.2003, 13:58
bez rulez nebudet krutez

Автор: Fantasist 17.4.2003, 16:27
Цитата
А знаковый бит везде одинаков: в однобайтовом числе это самый старший бит.


Да и вообще отрицательные числа храняться в дополнительном коде. (первый бит- знак, остальные реверсированное абсолютное значение-1)

Автор: Step 17.4.2003, 16:30
Цитата
Да и вообще отрицательные числа храняться в дополнительном коде. (первый бит- знак, остальные реверсированное абсолютное значение-1)
и это нам известно

Автор: Fantasist 17.4.2003, 16:36
Цитата
и это нам известно


Конечно известно - я же только что об этом сказал.

Автор: Step 17.4.2003, 16:40
и без тебя известно

Автор: Voker57 17.4.2003, 19:12
Цитата
char * a;
a= (char*)(&nChar)
if( *a=='s')

Ага а если ВООБЩЕ НИКАКОГО значения nChar НЕ ВОЗВРАЩАЕТ!!!
Ну, возвращает но ВСЕГДА 56!!!
Ничё ужастик? adv/naezd.gif

Автор: Step 18.4.2003, 09:24
эт ты чегото не досмотрел....

Автор: man2002ua 18.4.2003, 13:34
Цитата
QUOTE 
и это нам известно 


Конечно известно - я же только что об этом сказал.


Объясните - не понятно! biggrin.gif

Ну и раздули пламя wink.gif

Автор: Alex101 18.4.2003, 14:32
А вы еще представление с плавающей точкой обсудите smile.gif

Автор: DENNN 18.4.2003, 14:44
Цитата
А вы еще представление с плавающей точкой обсудите

Если разобраться, то не намного сложнее целочисленных.

Автор: man2002ua 18.4.2003, 14:52
Цитата
Если разобраться, то не намного сложнее целочисленных.

дафай-дафай - хуже не будет!

Автор: DENNN 18.4.2003, 16:44
А в чем ирония? Или тебе кажется этот настолько сложно, что не стоит потраченных усилий?

Автор: man2002ua 18.4.2003, 16:58
Я не иронизирую, я действительно не помню confused.gif

Автор: Step 18.4.2003, 16:59
тему пора закрывать

Автор: DENNN 18.4.2003, 17:04
Аминь.

Автор: Step 18.4.2003, 17:19
smile.gif

Автор: HexoGenus 19.4.2003, 21:09
По поводу размерности проще посмотреть хелп билдера...

unsigned char 8 bits 0 to 255
char 8 bits -128 to 127
short int 16 bits -32,768 to 32,767
unsigned int 32 bits 0 to 4,294,967,295
int 32 bits -2,147,483,648 to 2,147,483,647
unsigned long 32 bits 0 to 4,294,967,295
enum 16 bits -2,147,483,648 to 2,147,483,647
long 32 bits -2,147,483,648 to 2,147,483,647
float 32 bits 3.4 x 10-38 to 3.4 x 10+38
double 64 bits 1.7 x 10-308 to 1.7 x 10+308
long double 80 bits 3.4 x 10-4932 to 1.1 x 10+4932

а вот насчет того где какой бит находится вопрос интересный...
слабо кому нибудь привести пример функции которая выведет в текстовую переменную побитово переменную любого типа по ее адресуconfused.gif
например что бы вместо int(5) получить String("00000000000000000000000000000101")
каюсь в свое время у меня это не получилось... вроде и адрес переменной брал и потом как к булевому массиву обращался проверяя значение каждого бита... но получалась какая то чепуха вместо числа...

Автор: DENNN 19.4.2003, 21:26
По поводу размерности лучше все-таки на константы не расчитывать. Потому как в стандарте на C (и C++ тоже!) указано, что размерность некоторых типов данных может зависеть от конкртной реализации компилятора. А мы то с вами всетаки на C пишем а не просто на билдере или там VC.

А насчет второго вопроса, то он в общем смысле некоректен. То как располагается в памяти число, зависит в первую очередь, какой тип данных оно собой представляет. Так байт вида 0x10000001 может трактоваться и как число 129 если это тип unsigned char (на Win), и как -2 если это тип char.

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

BYTE mask=1;
BYTE value=68;//то, что хотим распечатать
do
{
if (0==(value&mask)) printf("0");else printf("1");
mask=(BYTE)(mask*2);
} while (mask!=0);

Может не самое быстрое решение из всех возможных, но этот то что пришло в голову сразу. Да и загнать в шаблон такую inline функцию - задача выполнимая для всех

Автор: HexoGenus 20.4.2003, 12:14
Хммм....
и все таки я не на с а на билдере программирую и приходится использовать все его надстройки и соответствующие расширения... smile.gif
твой код у мне не удалось запустить...
компилятор ругался на BYTE
от этого я избавился подключив
#include <WTYPES.H>
а вот строчку
} while (BYTE!=0);
он совсем не принимает ...
к своему стыду я не знаю что означает конструкция
value&mask
просвети плиз...

Автор: DENNN 20.4.2003, 12:24
Сорри. Ответ писал ночью поэтому там ошибочка: не while (BYTE!=0); а while (mask!=0); sad.gif

Уже все исправил. Смотри заново.

Конструкция (value&mask) означает в C побитовую операцию AND.
тип BYTE в MSDN описывается как "BYTE An 8-bit integer that is not signed." иными словами это 8-мибитное беззнаковое целое. В моем примере не принципиально, можно заменить на unsigned char, int, long и т.п..

Автор: Voker57 21.4.2003, 19:12
Цитата
эт ты чегото не досмотрел....

А мне по жизни с компиляторами не везет...
ТЕМУ ПОРА ЗАКРЫВАТЬ а так ни фига и не ясно... sad.gif
А тема горячая, аж мышка плавится! cool.gif

Автор: Fantasist 21.4.2003, 21:02
Цитата
иными словами это 8-мибитное беззнаковое целое


Другими словами typedef unsigned char

Цитата
на C пишем


На С++. Разные языки все-таки.

Автор: Wowa 22.4.2003, 00:54
тема закрыта smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)