当前位置:  开发笔记 > 人工智能 > 正文

使用指针解除引用生成的模糊输出?

如何解决《使用指针解除引用生成的模糊输出?》经验,为你挑选了1个好方法。

我遇到了以下程序,无法理解输出是-109 1683怎么回事.输出结果怎么样?

 #include 

 int main()
{
 int k = 1683;
 char *a = (char *)&k;
 int *l  = &k;
 printf("%d " , *a);
 printf("%d" , *l);
  }
 Output is : -109 1683

如何取消引用指针a给我-109

我希望它能读取四字节整数的第一个字节.

1683在二进制表示中是00000000 00000000 00000110 10010011.所以读取第一个字节意味着输出应该是0 1683.在幕后发生了什么,我听到了一些关于架构字节序的内容,但无法遵循它.



1> Some program..:

整数1683等于0x00000693(int在现代系统上通常为32位).在一个小端系统(如x86和x86-64)上,它在内存中布局就像

+------+------+------+------+------+------+------+------+
| 0x93 | 0x06 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
+------+------+------+------+------+------+------+------+

初始化指针a时,指向该序列中的第一个字节,即包含该值的字节,这是0x93取消引用时得到的值a.

现在谈谈价值如何0x93变成的问题-109.有两个原因:一个是char你的编译器signed(如果char是有符号或无符号类型,它依赖于编译器).第二个原因是因为二进制补码算法.二进制补码是一种能够在二进制机器上编码有符号整数的方法,如现代计算机.

基本上,对于单个8位字节,通过将(无符号)十进制值减去256(2 8)得到负值.无符号十进制值0x93147,和147 - 256等于-109.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有