有符號數和無符號數在一起運算,不要以為遵循的仍然是短的向長的靠齊。以前我們知道,如果一個short和一個int在一起運算,
C語言unsigned,首先編譯器會將short自動轉換為一個int類型中間變量,然后進行運算。但是有符號數和無符號數在一起運算的話,并不是這樣。
借此機會,串下整形數據轉換的相關知識。
c語言unsigned是什么意思及用法、首先說說符號數和無符號數之間的轉換。無符號數可以轉換為有符號數,有符號數也可以轉化為無符號整形,這之間的轉換一般編譯器也不會給出警告,因為這種轉換不涉及到bit丟失的情況,內存內容不會發生任何改變。僅僅是對這塊內存的解釋不一樣而已。
例如: int a = -3;
unsigned int數據范圍、unsigned int b= a; // b=
65533
反之一樣。
編譯器里面有標準的轉換,這個是在整形運算的時候出現。標準轉換的規則是:短的的向長的轉;有符號的向無符號的轉。如果被轉換的數據比轉換后的數據要長的話,轉換可能會丟失bit數據。通常,編譯器會給出警告。
無符號數據和有符號整數進行運算,是有符號整數向無符號整數靠齊。這里,我們可以總結一條規則:整形數運算,總是遵循一個原則:小的往大的擴展。
從小到達:short -> unsigned short -> int
-> unsigned int
之所以這里有符號數類型長度比無符號數類型長度小,區別在于最高位使用與否。下面看看幾個例子:
eg1:
int a=-6;
unsigned int b = 3;
typeid(a+b)-----------------------unsigned
int?a+b結果:為一個很大的整數
潛在:int --> unsigned int
eg2:
unsigned short s1 = 3;
int i2= -5;
typeid(s1+i2)
----------------------int?a+b結果:-2
潛在:unsigned short--> int
eg3:
unsigned int s1 = 3;
long i2= -5;
typeid(s1+i2) ---------------------unsigned
int?a+b結果:很大的正整數
潛在: long--> unsigned int
其它的如此類推
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态