memset的用法
1.赋极大值
memset(a,0x3f,sizeof(a));
2.赋0
memset(a,0,sizeof(a));
3.赋-1
memset(a,-1,sizeof(a));
赋值原理:
memset是按照字节赋值的,即将每个字节都赋值成要求赋予的值。但是,1个int型数据并不是1个字节的是4个字节的,所以对除了0,-1以外的整型用memset来赋值得到的结果不是赋的那个值。而1个char型数据是一个字节的,所以对于char型数据可以直接用memset来赋值。
0x代表以16进制形式表示的常数。将0x3f赋值给整型a,3f代表16进制下的2bit,而1byte= 8bit(位),即将0x3f3f3f3f的值赋值给int a。
那么这个值是多少呢?
0x3f = 0011 1111
0x3f3f3f3f = 0011 1111 0011 1111 0011 1111 0011 1111 第一位是符号位,0代表正数,1代表负数,所以该值是小于int上限一半的数,即该值乘2不会超过上限。
0x3f3f3f3f的十进制是1061109567,是10^9级别的,整型的范围是-2147483648~2147483647(-2^31~2^31-1)是10的九次方级别的,所以在整型范围内该值为极大值。
整型 | [signed] int | 4 byte |
无符号整型 | unsigned [int] | 4 byte |
短整型 | short [int] | 2 byte |
无符号短整型 | unsigned short [int] | 2 byte |
长整型 | long [int] | 4 byte |
无符号长整型 | unsigned long [int] | 4 byte |
字符型 | [signed] char | 1 byte |
无符号字符型 | unsigned char | 1 byte |
单精度型 | float | 4 byte |
双精度型 | double | 8 byte |
长双精度型 | long double | 8 byte |