#include <stdio.h>
int main()
{
char x=0x80;
int a[3][2] = {(0,1),(2,3),(4,5)};
int b[3][2] = {{0,1},{2,3},{4,5}};
int *p, *m;
p = a[0];
m = b[0];
printf("%d\n",p[0]); //输出1 注意逗号表达式
printf("%d\n",m[0]); //输出0 注意逗号表达式
/*内存中的数据存储的都是补码形式:模-绝对值=补码,举例 八位数的补码怎么求,通常老师教的是,正数源码取法+1,取反过程中符号位不变,补码的补码就是源码,
× 所以负数的源码就是对补码继续取反+1符号位不变就求出源码了,比如 -3的补码。3的源码是0000 0011最高为是符号位
-3源码 1000 0011
取反 1111 1100
+1 1111 1101 这就是-3在内存中存储的数据
继续求 1111 1101的源码
取反 1000 0010
+1 1000 0011 得到源码
那么问题来了在求边界的时候会出问题,所以我们这样计算 模等于 10000 0000 - 1000 0000(128是无符号数) = 补码
1 0000 0000
- 1000 0000
等于 1000 0000
所以-128的补码是1000 0000,所有的数都可以这么来求
*/
printf("%d\n",x); //输出-128补码的问题
}
面试中的易错题
最新推荐文章于 2022-03-07 22:02:29 发布