Rumah > hujung hadapan web > tutorial js > Blog Mingguan: Empat Perkara Menarik Yang Saya Temui Minggu Ini

Blog Mingguan: Empat Perkara Menarik Yang Saya Temui Minggu Ini

王林
Lepaskan: 2024-09-08 20:35:03
asal
714 orang telah melayarinya

1. Mengelakkan Mengelirukan Nama Fail dalam Kod VS

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.

Weekly Blog: Four Interesting Things I Encountered This Week

Kapsyen: Bodohnya!

  • Penyelesaian: Dalam fail tasks.json, tukar baris 'command' daripada gcc kepada g++.
  • Pelajaran yang dipelajari: Gunakan sambungan .cpp yang jelas untuk fail C++ untuk mengelakkan kekeliruan yang tidak perlu.

2. Falsafah Reka Bentuk Merentas Platform Java

Falsafah reka bentuk Java berbeza dengan ketara daripada bahasa tersusun tradisional:

Kompilasi Tradisional:

  1. Bahasa seperti C++ menyusun terus ke dalam kod mesin untuk khusus platform (cth., Windows, Mac, Linux)
  2. Fail boleh laku (.exe) yang terhasil hanya boleh dijalankan pada platform sasaran

Pendekatan Java:

  1. Pengkompil menjana kod perantaraan (kod bait)
  2. Kod bait ini boleh dijalankan pada mana-mana platform dengan Mesin Maya Java (JVM) dipasang
  3. JVM bertanggungjawab untuk menterjemah bytecode ke dalam kod mesin untuk platform semasa

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 Gosling
Salin selepas log masuk

3. Dua Mod Kompilasi Biasa

  • Mod nyahpepijat berorientasikan penyahpepijatan, dengan pengoptimuman yang lebih sedikit. Ia digunakan terutamanya untuk menyahpepijat program.
  • Mod keluaran digunakan terutamanya untuk menjana versi keluaran, memfokuskan pada pengoptimuman dan hanya mengekalkan fungsi penyahpepijatan asas.

Weekly Blog: Four Interesting Things I Encountered This Week

4. Memahami Casting Jenis Paksa dari Perspektif Aras Rendah

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!

Permainan Seronok untuk Memahami Casting Jenis Paksa

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);

}
Salin selepas log masuk

Output:

329933
-51
Salin selepas log masuk

Saya ingin tahu mengapa ia menghasilkan -51?

Penjelasan

  1. (char*)&a menunjuk ke bait pertama int. Bait pertama 11001101ditafsirkan sebagai aksara.
  2. Bit 1 tertinggi menunjukkan nombor negatif, selepas penukaran pelengkap dua, kita mendapat -51 (rakan-rakan yang biasa dengan pelengkap dua boleh mengesahkan sama ada ia mewakili -51)

Adakah ini satu kebetulan? Jom cuba dua lagi contoh

printf("%d\n",*(q+1));
printf("%d\n",*(q+2));
Salin selepas log masuk

Cubalah:

  1. Cuba jalankan kod yang dinyatakan di atas dan perhatikan outputnya.
  2. Pertimbangkan mengapa bait kedua dan ketiga menghasilkan output sedemikian. Sila bincangkan perkara ini di bahagian komen.
  3. Bolehkah anda menggunakan penghantaran jenis paksa pada jenis data lain? Cubalah!

Maklumat Tambahan: Two's Complement

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?

Manfaat Two's Complement:

  1. Ia membolehkan kedua-dua jenis positif dan integer dikira menggunakan hanya penambah, menghapuskan keperluan untuk penolakan dan memudahkan keperluan perkakasan.
  2. Ia menyediakan perwakilan binari unik untuk sifar. 10000000 tidak mewakili -0, tetapi -128, manakala 00000000 mewakili 0, bukan +0.

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan