首页 > 代码库 > c/c++带符号类型和无符号类型
c/c++带符号类型和无符号类型
除了布尔型和扩展类型,其它整型可分为带符号的和无符号的,带符号的可表示正数、“0”、负数,不带符号的只能表示正数和“0”,若要声明变量为无符号类型可使用unsigned来声明,声明为有符号的用signed。像int、short、long这些类型默认都是带符号的,因此不用声明为带符号的,若要声明为无符号的话在在类型名前加unsigned就行。
字符型和其它整型不同,可分为三种,分别为char、signed char、unsigned char。要注意的是char 和 signed char并不一样,字符的表现形式只有两种,分别是signed char和unsigned char,如果不加声明,char会表现为上面类型的其中一种,这由编译器决定,因此一般不使用char来存放其它整数,若要使用,最好加声明。
无符号的类型中的所有比特都用来储存值,例如8bit的unsigned char表示的值的取值范围是0~255。带符号类型约定表示正值的范围和负值的范围相等,所以8bit的signed理论上可以表示的范围是-127~127,但大多数计算机将实际表示的范围定为-128~127。
下面演示一下:
#include <iostream> #include <stdio.h> using namespace std; int main() { int val1=-1; unsigned val2=-1;//unsigned int cout<<val1<<endl; cout<<val2<<endl; //char char dat1=-1; signed char dat2=-1; unsigned char dat3=-1; printf("%d\n",dat1); printf("%d\n",dat2); printf("%d\n",dat3); return 0; }
上面演示的就是带符号和无符号的区别,但会觉得奇怪为什么把一个负数赋值给一个无符号类型的变量会得到一个这么大的数,这是因为当我们赋值给无符号类型一个超过它范围的值,结果是初始值对无符号类型表示数值总数取模后的的余数。例如unsigned char类型大小为一个字节,就是8比特,当我们赋-1给它的一个变量,-1已经超过了它的取值范围,所以结果是该值对256取模后的所得的余数,因此所得的结果是255。
c/c++带符号类型和无符号类型