一、自增,自减
前置和后置的区别:
++a:
1.a=a+1;
2.a的值传给寄存器;
a++:
1.a的值传给寄存器;
2.a=a+1;
3.更新内存中的a值;
总结:
1.前置是先改值后使用;
2.后置是先使用后改值;
3.前置比后置的效率高;
代码示例:
int a=1,b=2;
printf("%d %d\n",a+b++,++a+b);
3 4
二、数据的存储
1.代码示例:
short int a = 32768;
printf("%d\n" ,a);
-32768
正数原码,反码,补码相同.32768=2^15(4个字节),其补码为:
00000000 00000000 10000000 00000000
但变量a为短整型((2个字节),发生截断,其补码为:
10000000 00000000
以有符号整型(4个字节)输出,发生整型提升(有符号数补符号位,无符号数补0),
提升后补码为:
11111111 11111111 10000000 00000000
反码:
11111111 11111111 01111111 11111111
原码:
10000000 00000000 10000000 00000000
结果:-32768
2.代码示例:
char arr[3000];
arr[0] = 'a';
for (int i = 1;i<3000; i++)
{
arr[i] = i;
}
printf("%d\n", strlen(arr));
256
我们只需知道arr[i]最早何时为0;
从下标1开始arr[i]依次递增,由于char能存的最大正数是127(01111111),当下标为128(10000000)时,arr[128]为-128(参考第一问),再依次递增:-127,-126…-2,-1,0;
显然,结果为1+127+127=256;