1.类型转换:
当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示值总数取模后的余数。
比如: unsigned int i = -1;
在计算机中 负数是以补码的形式存储的。
原码:将一个数转换成二进制就是它的原码。
1的原码: 0000 0000 0000 0001
-1的原码:1000 0000 0000 0001
反码:正数的补码是本身,负数的补码是除符号位按位取反。
1的反码: 0000 0000 0000 0001
-1的反码:1111 1111 1111 1110
补码:正数是本身 负数是反码+1
1的补码: 0000 0000 0000 0001
-1的补码:1111 1111 1111 1111
-1是超出unsigned int 范围的,无符号int 可以表示的总数是[0, 0xffff) 一共2^16 个数,所以-1赋给unsigned int 的值应该是 (216-1)%216,所以-1的表示形式 是 0xffff
16位的编译器 int占16位(2个字节)
32或64位的编译器 int占32位(4个字节)
unsigned int i = -1;
printf("%u\n", i); //4294967295
printf("%d\n", i); //-1 相当于强制转换成signed
- sizeof & memset
si