面试中的易错题

#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补码的问题 
}

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值