Apabila menulis fail C++ dalam Kod VS, saya menamakan fail terlebih dahulu.c.cpp. Selepas melengkapkan program, saya mengalami ralat semasa pelaksanaan. Selepas 30 minit menyelesaikan masalah, saya mendapati isu itu terletak pada nama fail:
Sambungan .c menyebabkan IDE tersilap mengenal pasti ia sebagai atur cara C, menyebabkan Kod VS menggunakan gcc (pengkompil C) dan bukannya g++ (pengkompil C++) untuk menyusun kod saya.
Kapsyen: Bodohnya!
Falsafah reka bentuk Java berbeza dengan ketara daripada bahasa tersusun tradisional:
Reka bentuk ini mencapai matlamat "Tulis Sekali, Jalankan Di Mana-mana", manakala C++ boleh laku (fail .exe) terhad untuk dijalankan pada satu platform.
Kelebihan:Program yang sama boleh dijalankan pada komputer yang berbeza tanpa pengubahsuaian
Kelemahan:Langkah tambahan dalam proses boleh membuat kompilasi sedikit perlahan berbanding kaedah tradisional
Tulis sekali, Jalankan ke mana-mana
---------James GoslingSalin selepas log masuk
Endian Kecil: Bait paling tidak ketara disimpan di alamat paling rendah. Kaedah storan ini muncul untuk memudahkan pembacaan memori CPU, yang berlaku dari alamat rendah ke tinggi. Menariknya, ini bertentangan dengan kebiasaan manusia menulis nombor.
Contohnya:
Perwakilan binari 329933 ialah 00000000 00000101 00001000 11001101
Storan Little Endian: 11001101 00001000 00000101 00000000
Seperti yang dapat kita lihat, Little Endian membalikkan susunan bait dalam perwakilan binari. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa susunan bit dalam setiap bait kekal tidak berubah!
Percubaan kegemaran saya untuk memperkenalkan pemutus jenis!
# 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); }
Output:
329933 -51
Saya ingin tahu mengapa ia menghasilkan -51?
Adakah ini satu kebetulan? Jom cuba dua lagi contoh
printf("%d\n",*(q+1)); printf("%d\n",*(q+2));
Cubalah:
Apabila melakukan penghantaran jenis paksa, (char)p akan menunjuk ke alamat bait pertama int empat bait, iaitu 11001101.
1 paling kiri mewakili tanda negatif, menunjukkan ia nombor negatif. Selepas menggunakan pelengkap dua, kami mendapat: 0110011 (7 bit terakhir)
(Nota: Untuk nombor positif, pelengkap kedua-duanya hanyalah perwakilan perduaan nombor perpuluhan. Untuk nombor negatif, pelengkap kedua-duanya diperoleh dengan menyongsangkan semua bit kecuali bit paling kiri (tertinggi), kemudian menambah 1 ke bahagian paling kanan.)
Menukar ini kepada perpuluhan memberikan kita -51. Menarik kan?
Ramai orang tertanya-tanya mengapa ia -128. Jika anda tahu jawapannya, sila kongsikan di ruangan komen. Ini bukan sahaja membantu orang lain tetapi juga membantu anda menyusun fikiran anda.
Atas ialah kandungan terperinci Blog Mingguan: Empat Perkara Menarik Yang Saya Temui Minggu Ini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!