PDA

View Full Version : کاراکتر ها از نوع signed و unsigned



fshb_ 1370
پنج شنبه 14 مرداد 1389, 09:27 صبح
سلام
حروفی که از نوع char هستند، در حافظه به صورت عدد ذخیره میشن، این اعداد مثبت هستند؟ اگه مثبتند پس چرا کاراکترها از نوع unsigned و signed تعریف میشن؟

PC2st
پنج شنبه 14 مرداد 1389, 09:59 صبح
برخلاف انواع عددی (نوع int) که بصورت پیش‌فرض بصورت signed هستند.در زبان استاندارد ++C سه نوع کاراکتر داریم:


char
signed char
unsigned char

نوع char می‌تواند بصورت signed یا unsigned باشد و این انتخاب به سیستم مورد استفاده واگذاشته شده است. نوع char (بدون signed و unsigned) نوعی است که برای معرفی کاراکترها به کار می‌رود. معمولا از signed char و یا unsigned char برای کار با اعداد (به جای byte) استفاده می‌شود.

Nima_NF
پنج شنبه 14 مرداد 1389, 12:26 عصر
مقادیری که char و signed char ذخیره می کنند چون 1 بایت هستند، بازه اش بین 128- تا 127 هست.
برای unSigned char نیز این بازه بین 0 تا 255 محاسبه می شود.

به مثال زیر دقت کنید:



unsigned char ch1 = 150;
signed char ch2 = 150;
char ch3 = 150;

cout << (int)ch1 << " "<<(int)ch2 << " "<<(int)ch3;

در مثال فوق، عدد 150 یعنی معادل آن هگز 0x96 در هر سه متغیر ذخیره می شود، اما نحوه تفسیر آن عدد متفاوت خواهد بود، زیرا انواع داده ای متفاوت از هم هستند. (1 آخر در بیت آخر منفی را نتیجه می دهد)

پس در خروجی شما عدد 150 و سپس 106- و 106- را خواهید دید.

fshb_ 1370
شنبه 16 مرداد 1389, 12:51 عصر
مقادیری که char و unsigned char ذخیره می کنند چون 1 بایت هستند، بازه اش بین 128- تا 127 هست.
برای Signed char نیز این بازه بین 0 تا 255 محاسبه می شود.

به مثال زیر دقت کنید:



unsigned char ch1 = 150;
signed char ch2 = 150;
char ch3 = 150;


cout << (int)ch1 << " "<<(int)ch2 << " "<<(int)ch3;

در مثال فوق، عدد 150 یعنی معادل آن هگز 0x96 در هر سه متغیر ذخیره می شود، اما نحوه تفسیر آن عدد متفاوت خواهد بود، زیرا انواع داده ای متفاوت از هم هستند. (1 آخر در بیت آخر منفی را نتیجه می دهد)

پس در خروجی شما عدد 150 و سپس 106- و 106- را خواهید دید.
اگر یک متغیر از نوع unsigned باشه، میتونه مقدار منفی بگیره؟

tdkhakpur
شنبه 16 مرداد 1389, 18:42 عصر
اگر یک متغیر از نوع unsigned باشه، میتونه مقدار منفی بگیره؟

عدد منفی معنا ندارد فقط خروجی مشخص میکند که عدد منفی هست یا نه به فرض


signed char s_ch=135;
unsigned char uns_ch=135;
s_ch; --> خروجی منفی
uns_ch;->> خروجی مثبت
ولی اگر برای کامپایلر به این شکل کد بدید
unsigned char)s_ch; --> خروجی مثبت
(signed char)uns_ch;->> خروجی منفی

Roshanakerfan
دوشنبه 25 مهر 1390, 12:08 عصر
چطوری شد 106- و 106-؟؟؟