اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

اطلاع از علامت‌دار بودن یا نبودن یک متغیر صحیح

0 امتیاز
613 نمایش

یه متغیر صحیح دارم که نمی‌دونم علامت‌داره یا بدون علامت. می‌خوام با کد بررسی کنم. چه کدی پیشنهاد می‌دین؟
دقت کنین نمی‌خوام بدونم متغیر منفی یا مثبته می‌خوام بدونم نوع این متغیر علامت‌دار هست یا نه!

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده یکشنبه ۲۵ فروردین ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

حالت اول. در صورتی که برانون مهم نیست که مقدار داخل متغیر از دست بره کد زیر با شیفت دادن این و پیدا می‌کنه.

x = 1;
if(x<<(sizeof(x)*CHAR_BIT-1) < 0) cout<<"signed";
else cout<<"unsigned";

در صورتی که قرار نیست مقدار داخل متغیر از دست بره می‌شه به صورت زیر تست کرد

if((x | (1<<(sizeof(x)*CHAR_BIT-1))) < 0) cout<<"signed";
else cout<<"unsigned";

برنامه‌ی زیر به طور کامل این روش رو روی چند نوع داده بررسی می‌کنه

#include <iostream>
using namespace std;

int main()
{
  int i;
  unsigned int ui;
  signed long int sli;
  unsigned long int uli;
  /*char c;
  signed char sc;
  unsigned char uc;*/

  i = 1;
  if(i<<(sizeof(i)*CHAR_BIT-1) < 0) cout<<"i : signed"<<endl;
  else cout<<"i : unsigned"<<endl;

  ui = 1;
  if(ui<<(sizeof(ui)*CHAR_BIT-1) < 0) cout<<"ui : signed"<<endl;
  else cout<<"ui : unsigned"<<endl;

  sli = 1;
  if(sli<<(sizeof(sli)*CHAR_BIT-1) < 0) cout<<"sli : signed"<<endl;
  else cout<<"sli : unsigned"<<endl;

  uli = 1;
  if(uli<<(sizeof(uli)*CHAR_BIT-1) < 0) cout<<"uli : signed"<<endl;
  else cout<<"uli : unsigned"<<endl;

  /*c = 1;
  if(c<<(sizeof(c)*CHAR_BIT-1) < 0) cout<<"c : signed"<<endl;
  else cout<<"c : unsigned"<<endl;

  sc = 1;
  if(sc<<(sizeof(sc)*CHAR_BIT-1) < 0) cout<<"sc : signed"<<endl;
  else cout<<"sc : unsigned"<<endl;

  uc = 1;
  if(uc<<(sizeof(uc)*CHAR_BIT-1) < 0) cout<<"uc : signed"<<endl;
  else cout<<"uc : unsigned"<<endl;*/

  if((i | (1<<(sizeof(i)*CHAR_BIT-1))) < 0) cout<<"i : signed"<<endl;
  else cout<<"i : unsigned"<<endl;

  if((ui | (1<<(sizeof(ui)*CHAR_BIT-1))) < 0) cout<<"ui : signed"<<endl;
  else cout<<"ui : unsigned"<<endl;

  if((sli | (1<<(sizeof(sli)*CHAR_BIT-1))) < 0) cout<<"sli : signed"<<endl;
  else cout<<"sli : unsigned"<<endl;

  if((uli | (1<<(sizeof(uli)*CHAR_BIT-1))) < 0) cout<<"uli : signed"<<endl;
  else cout<<"uli : unsigned"<<endl;

  /*if((c | (1<<(sizeof(c)*CHAR_BIT-1))) < 0) cout<<"c : signed"<<endl;
  else cout<<"c : unsigned"<<endl;

  if((sc | (1<<(sizeof(sc)*CHAR_BIT-1))) < 0) cout<<"sc : signed"<<endl;
  else cout<<"sc : unsigned"<<endl;

  if((uc | (1<<(sizeof(uc)*CHAR_BIT-1))) < 0) cout<<"uc : signed"<<endl;
  else cout<<"uc : unsigned"<<endl;*/

  return 0;
}

اون قسمت‌هایی که توضیح شده مربوط به نوع کاراکتری هست که در این روش نتیجه‌ی درست نمی‌ده.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده جمعه ۱۰ خرداد ۱۳۹۲ توسط prodo