C语言中的有符号数和无符号数之间转换
我们都知道C语言中有有符号数和无符号数两种整数表示方法,并且支持相互转换。
那么具体相互转换有什么规则,我们今天来了解一下:
在C语言中当声明一个像12345或0x1A2B这样的常量时,这个值默认是有符号的,要声明一个无符号常量必须在常量后面加上’u’或‘U’,例如12345u或0x1A2BU。C语言允许有符号和无符号数之间的转换,具体的转换规则是,底层的位表示保持不变。
例如:
强制类型转换导致转换发生:
int tx, ty;
unsigned ux, uy;
ty = (unsigned)ux;
uy = (int)tx;
当一种类型变量赋给另一种类型,隐式转换发生:
int tx, ty;
unsigned ux, uy;
ty = ux; // cast to int
uy = tx; // cast to unsigned