在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 颠倒了二进制表示中的字节顺序。然而,需要注意的是,每个字节内的位顺序保持不变!
我最喜欢的引入类型转换的实验!
# include <iostream> int 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。如果你知道答案,欢迎在评论区分享。这不仅可以帮助别人,还可以帮助你整理思绪。
以上是每周博客:本周我遇到的四件有趣的事情的详细内容。更多信息请关注PHP中文网其他相关文章!