日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言有符号和无符号数

發(fā)布時(shí)間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言有符号和无符号数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

%x表示無(wú)符號(hào)十六進(jìn)制
%#x表示0x的十六進(jìn)制
%o 無(wú)符號(hào)以八進(jìn)制表示的整數(shù)
%lu表示輸出無(wú)符號(hào)長(zhǎng)整型整數(shù)
%u表示輸出無(wú)符號(hào)整型整數(shù)

int main() { int a = -1; unsigned int b = 1; if(a > b) printf("a > b, a = %d, b = %u\n", a, b); else printf("a <= b, a = %d, b = %u\n", a, b); exit(0); }

輸出結(jié)果為:
a>b a=-1 b=1
當(dāng)執(zhí)行一個(gè)運(yùn)算時(shí)(如這里的a>b),如果它的一個(gè)運(yùn)算數(shù)是有符號(hào)的而另一個(gè)數(shù)是無(wú)符號(hào)的,那么C語(yǔ)言會(huì)隱式地將有符號(hào) 參數(shù)強(qiáng)制類(lèi)型為無(wú)符號(hào)數(shù),并假設(shè)這兩個(gè)數(shù)都是非負(fù)的,來(lái)執(zhí)行這個(gè)運(yùn)算。

原因: (把有符號(hào)的變成了無(wú)符號(hào)的)
把if語(yǔ)句改為if(a > (int)b)即可。這樣程序就會(huì)認(rèn)為是兩個(gè)有符號(hào)數(shù)在進(jìn)行比較,-1就不會(huì)隱式地轉(zhuǎn)換為無(wú)符號(hào)數(shù)而變成UMax。在32和64位的機(jī)子上,-1對(duì)應(yīng)的無(wú)符號(hào)數(shù)應(yīng)該是4 294 967 295,即32位的無(wú)符號(hào)數(shù)的最大值(UMax)

解決: (無(wú)符號(hào)轉(zhuǎn)為有符號(hào))
把if語(yǔ)句改為if(a > (int)b)即可。這樣程序就會(huì)認(rèn)為是兩個(gè)有符號(hào)數(shù)在進(jìn)行比較,-1就不會(huì)隱式地轉(zhuǎn)換為無(wú)符號(hào)數(shù)而變成UMax。

建議:
盡量避免有符號(hào)數(shù)與無(wú)符號(hào)數(shù)的比較運(yùn)算和避免減法運(yùn)算,在很多時(shí)候,在unsigned的世界里,x-y>0與x>y都是不等價(jià)的。

extern int a; //聲明一個(gè)變量 (標(biāo)準(zhǔn)的聲明)
int a; //定義一個(gè)變量 如果已經(jīng)被定義了,則為聲明

無(wú)符號(hào)char類(lèi)型數(shù)運(yùn)算
unsigned char s = 0;
s = s - 1;
printf(“%d\n”,s) //輸出255 相當(dāng)于0加上-1的補(bǔ)碼 0000 0000 + 1111 1111 = 1111 1111 (255)

有符號(hào)char類(lèi)型數(shù)運(yùn)算
char s = 127; 0111 1100
s = s + 5; 0111 1111
補(bǔ)碼 =》原碼 符號(hào)位不變,其它位取反,最后一位加1,
例如:
補(bǔ)碼:1000 0100 132
過(guò)程:1111 1011 =》1111 1100
原碼:0111 1100 -127

當(dāng)表達(dá)式中存在有符號(hào)類(lèi)型和無(wú)符號(hào)類(lèi)型時(shí)所有的操作數(shù)都自動(dòng)轉(zhuǎn)換為無(wú)符號(hào)類(lèi)型。

總結(jié)

以上是生活随笔為你收集整理的C语言有符号和无符号数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。