在VS Code中编写C文件时,我将一个文件命名为first.c.cpp。完成程序后,我在执行过程中遇到了错误。经过30分钟的排查,我发现问题出在文件名:
.c 扩展名导致 IDE 错误地将其识别为 C 程序,导致 VS Code 使用 gcc(C 编译器)而不是 g(C 编译器)来编译我的代码。
说明文字:真傻!
Java的设计理念与传统编译型语言有显着不同:
这种设计实现了“一次编写,随处运行”的目标,而 C 可执行文件(.exe 文件)仅限于在单个平台上运行。
优点:同一个程序无需修改即可在不同计算机上运行
缺点:与传统方法相比,过程中的额外步骤可能会使编译速度稍微慢一些
一次编写,随处运行
---------James Gosling
Little Endian:最低有效字节存储在最低地址。这种存储方法的出现是为了方便CPU从低地址到高地址读取内存。有趣的是,这与人类通常写数字相反。
例如:
329933 的二进制表示为 00000000 00000101 00001000 11001101
小端存储:11001101 00001000 00000101 00000000
正如我们所看到的,Little Endian 颠倒了二进制表示中的字节顺序。然而,重要的是要注意每个字节内的位顺序保持不变!
我最喜欢的引入类型转换的实验!
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
输出:
329933 -51
我很好奇为什么它输出-51?
这是巧合吗?让我们再尝试两个例子
printf("%d\n",*(q 1)); printf("%d\n",*(q 2));
尝试一下:
执行强制类型转换时,(char)p将指向四字节int的第一个字节的地址,即11001101。
最左边的1代表负号,表示是负数。应用二进制补码后,我们得到:0110011(最后 7 位)
(注:对于正数,二进制补码就是十进制数的二进制表示。对于负数,二进制补码是将除最左边(最高)位之外的所有位取反,然后加 1 得到的到最右边的位。)
将其转换为十进制得到-51。有趣吧?
很多人想知道为什么是-128。如果你知道答案,欢迎在评论区分享。这不仅可以帮助别人,还可以帮助你整理思绪。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3