حالت اول. در صورتی که برانون مهم نیست که مقدار داخل متغیر از دست بره کد زیر با شیفت دادن این و پیدا میکنه.
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;
}
اون قسمتهایی که توضیح شده مربوط به نوع کاراکتری هست که در این روش نتیجهی درست نمیده.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)