技術交流QQ群:1027579432狐胎,歡迎你的加入舍哄!
C++中的無符號數(shù)與有符號數(shù)的轉換
- 1.無符號數(shù)轉為有符號數(shù)
unsigned short int a = 50000; signed short int b = 0; b = a; cout << "無符號數(shù)轉為有符號數(shù): " << b << endl;
- 解釋:因為short int 在32位機器上占2個字節(jié)湖员,即16位漫雕。故無符號數(shù)unsigned short int表示范圍是0到65535。而有符號數(shù)signed int可表示的范圍是-32768-32767楚昭。無符號數(shù)轉為有符號數(shù)的轉換方法是:假設無符號數(shù)是N冈涧,無符號數(shù)的數(shù)據(jù)基本類型所占的位數(shù)是B位茂附,則有符號數(shù)的表示是:N - 2^B
- 2.有符號數(shù)轉為無符號數(shù)
unsigned int u = 10; int i = -42; cout << "有符號數(shù)轉為無符號數(shù):" << u+i << endl;
- 解釋:當有符號數(shù)和無符號數(shù)相加時,首先將有符號數(shù)變?yōu)闊o符號數(shù)督弓,然后執(zhí)行加法操作营曼。有符號數(shù)轉為無符號數(shù)的方法:有符號數(shù)+無符號數(shù)的模。例如上例中愚隧,int i = -42;i是一個有符號數(shù)蒂阱,unsigned int u是一個無符號數(shù),u在32位機器上占4個字節(jié)狂塘,即32位录煤,故無符號數(shù)u的模是2^32。所以荞胡,最后的結果是u+i =-42+2^32+10
- 3.兩個無符號數(shù)之間的運算
unsigned int u1 = 42, u2 = 10; cout << "u1 - u2 = " << u1 - u2 << endl; // 正常運算 cout << "u2 - u1 = " << u2 - u1 << endl; // u1-u2 = -32,因為無符號數(shù)不會小于0妈踊,然所以將使用上面2中的方法,故最后的結果是-32+2^32
- 4.無符號數(shù)用于循環(huán)
// for(unsigned int i = 10; i >=0;i--) 陷入死循環(huán)!!!原因是當執(zhí)行到最后一次循環(huán)時,輸出i = 0,i--后i變成-1泪漂,根據(jù)上面3的分析廊营,所以被自動轉成無符號數(shù)2^32-1,再繼續(xù)進行循環(huán) // cout << "i = " << i << endl; unsigned int u3 = 11; while(u3 > 0){ // 改用fwhile循環(huán)將不會陷入死循環(huán) --u3; cout << "u3 = " << u3 << endl; }