الكلمة الرئيسية غير الموقعة في C ++
سؤال
هل الكلمة الرئيسية غير الموقعة الافتراضية لنوع بيانات معين في C ++؟ أحاول كتابة وظيفة لفصل للنموذج الأولي:
unsigned Rotate(unsigned object, int count)
لكني لا أحصل على ما unsigned
يعني. لا ينبغي أن يكون مثل unsigned int
أو شيء ما؟
المحلول
من حلقة الوصل في الاعلى:
يمكن تعديل العديد من هذه الأنواع باستخدام الكلمات الرئيسية الموقعة وغير الموقعة والقصيرة والطويلة. عندما يتم استخدام أحد المعدلات من النوع هذه في حد ذاته ، يتم افتراض نوع بيانات int
هذا يعني أنه يمكنك افتراض أن المؤلف يستخدم INTS.
نصائح أخرى
أنواع عدد صحيح:
short -> signed short
signed short
unsigned short
int -> signed int
signed int
unsigned int
signed -> signed int
unsigned -> unsigned int
long -> signed long
signed long
unsigned long
كن حذرا من تشار:
char (is signed or unsigned depending on the implmentation)
signed char
unsigned char
هل الكلمة الرئيسية غير الموقعة الافتراضية لنوع البيانات في C ++
نعم ، يمكن أيضًا استخدام موقّع وغير موقّع كحديد نوع مستقل
يمكن توقيع أنواع بيانات عدد صحيح ، وقصيرة وطويلة و int أو غير موقعة اعتمادًا على نطاق الأرقام اللازمة لتمثيلها. يمكن أن تمثل الأنواع الموقعة القيم الإيجابية والسلبية ، في حين أن الأنواع غير الموقعة يمكن أن تمثل فقط القيم الإيجابية (والصفر).
يمكن أن يكون لعدد صحيح غير موقّع يحتوي على أجزاء n قيمة بين 0 و 2ن - 1 (وهو 2ن قيم مختلفة).
ومع ذلك ، يمكن أيضًا استخدام موقّع وغير موقّع كحديد نوع مستقل ، وهذا يعني نفس int الموقّعة و int غير موقعة على التوالي. التصريحين التاليين متكافئان:
unsigned NextYear;
unsigned int NextYear;
يمكنك أن تقرأ عن الكلمة الرئيسية غير موقعة في مرجع C ++.
هناك نوعان مختلفان في هذه المسألة ، موقعة وتوقيع. يتم توقيع الافتراضي للأعداد الصحيحة مما يعني أنه يمكن أن يكون لها قيم سلبية.
على نظام 32 بت ، يكون عدد صحيح 32 بت مما يعني أنه يمكن أن يحتوي على قيمة ~ 4 مليار.
وعندما يتم توقيعه ، هذا يعني أنك بحاجة إلى تقسيمه ، تاركًا من 2 مليار إلى 2 مليار.
عندما تكون غير موقعة ولكن القيمة لا تستطيع تحتوي على أي أرقام سالبة ، لذلك بالنسبة للأعداد الصحيحة ، فإن هذا يعني من 0 إلى +4 مليار.
هناك المزيد من المعلومات على هذا ويكيبيديا.
نعم ، هذا يعني unsigned int
. كان من المعتاد أنه إذا لم تحدد نوع بيانات في C ، فهناك العديد من الأماكن التي يفترض فيها للتو int
. كان هذا ، على سبيل المثال ، من أنواع إرجاع الوظائف.
تم القضاء على هذا الثؤلول في الغالب ، لكنك تواجه آخر بقاياها هنا. IMHO ، يجب إصلاح الكود ليقول unsigned int
لتجنب مجرد نوع من الالتباس الذي تواجهه.