在C/C++语言中,unsigned用来表示无符号类型,即正整数类型,它不包含任何负数。
在内存中,unsigned类型数据的二进制表示与有符号类型数据的二进制表示完全相同,只是解释方式不同。unsigned类型数据的最高位不再表示符号位,而表示数值大小,因此unsigned类型数据的表示范围比相同位数的有符号类型数据大一倍。
unsigned类型主要用于两个场景:
第一个场景是当我们需要使用存储正整数的变量时,就可以使用unsigned类型。
第二个场景是当我们需要对位操作进行控制时,就可以使用unsigned类型。
对于位操作,unsigned类型可以帮助我们更加灵活地控制每一个二进制位的值,从而达到特定的目的。比如在位图操作中,unsigned类型就非常常用。
虽然unsigned类型的内部表示与有符号类型相同,但是在运算符的表现上,两者有很大的区别。
对于无符号类型,如果参与到了负数运算,结果可能跳出该类型数据的表示范围,此时我们称之为溢出。溢出后的结果是不可预期的,可能是负数、正数,也可能是其他不该出现的结果。
有符号类型也会发生溢出,但是对于有符号类型的溢出,结果是可以预测的。规定,如果溢出后结果超出了有符号类型的表示范围,则将其截断,只保留低位,高位舍弃。被舍弃的高位信息代表符号,也就是说溢出后的结果会被认为是一个巨大的负数。
在C/C++中,常见的无符号整数类型包括unsigned char、unsigned short、unsigned int和unsigned long。
它们的表示范围依次扩大,分别为0~255、0~65535、0~4294967295和0~18446744073709551615。
需要注意的是,无论采用哪种类型,都需要按照其表示的范围来合理地使用它们,避免发生溢出。