关于c语言中char类型在内存中的存储结构的分析

     最近写了一个关于二进制模二运算求余数的算法由于用到了二进制的与,或,非等运算所以过程中也对char类型在内存中的二进制表示有了一定认识下面 分享给大家。
    众所周知char类型数据在内存中是以ACSII码的形式存储的,这样也便于char与int型的相互转换,但是char型是一个字节也就是有8个二进制位,而且最高位是一个符号位,所以当char中的最高位为1也就当你 给 char类型复制大于0x7f时char就变成了一个赋值,如果用vc单步跟踪就会发现是一个负xx的十进制数,并且该数的值也不等于你赋予他的实际值除去高位后负的剩余值,可能说到这里到家不是很懂那么我来举个例子,例如你赋于char是是1010 1010 那么如果按高位是符号位那么转换为十进制应该为-42,而当你单步跟踪或者以%d输出这个char时却为-86,通过把-86转换为二进制数,我们发现他为1101 0110,炸一看肯能有点摸不到头脑,相信细心的读者已经发现1101 0110 是1010 1010 的补码。呵呵~原来是这样,c语言提供给我们的输出char  a;sanf(“%d”,a);输出的其实是char的补码而不是原码,但是内存中真正存的又是什么呢!?通过用0x80,0x40,0x20.....同c刚才赋值的char类型变量做“与”运算的结果。我发现真是存储的其实还是他的补码也就是1101 0110 !!这个才是我想告知给大家的重点,同时也是为了加深自己的记忆,希望对还不清楚的人有所帮助,已经知道请包涵我的学识还没有达到你的高度。好了就这么多了,希望对大家有用!~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值