C/C++中字节序、类型转化的深入理解
如果将字节序、类型转化单独一个拿出来说时,大家可能都觉得很简单,但是理解的不深入。如果将其结合起来探讨,可能我们就会理解的很透彻。
关于字节序和类型转化的基础,大家如果不太理解,可以参考以下博客:
https://my.oschina.net/u/1783725/blog/647973 大小字节序
https://my.oschina.net/u/1783725/blog/700970 类型转化
在进入正题之前,在啰嗦一句:
系统位数不同对应数据类型的字节数大小也不同
详细介绍两者之间的联系
字节序: 操作的内存,就是将我们看到的数据存放在内存中的规则。
大字节序:大端有效 ,高位数据先放入低地址内存 , 低位数据放入高地址内存;小字节序:小端有效,低位数据先放入低地址内存 , 高位数据再放入高地址内存
操作内存(如:memcpy)就需要考虑字节序
类型转化: 操作的是读出的数据,就是将从内存中读取的数据,根据类型字节的大小进行转化。
位数多的转化为位数小的(会截断高位的数据,留下地位的数据),位数小的转化为位数多的(将高位的数据补为0)。
一个例子来读懂他们
1、赋值与字节序无关,操作内存(memcpy)就需要考虑字节序
1:将unsigned long long类型的0xABCDEF1234赋值给unsigned long类型的变量,与字节序无关
2:unsigned long long类型的0xABCDEF1234变量使用memcpy到short类型的变量,发现为0,与字节序有关
代码如下:
#include <stdio.h>int main(int argc, char *argv[]) { unsigned long long ullVar = 0xABCD1234; unsigned long ulVar1 = 0; unsigned long ulVar2 = 0; /*memcpy操作内存时,需要考虑系统的大小字节序,如果是大字节序的话,高位的数据保存在低地址上*/ memcpy(&ulVar1,&ullVar,sizeof(ulVar1)); /*赋值时,就是讲读出的数据按照要赋值的数据类型的大小进行转换*/ ulVar2 = ullVar; printf("ulVar1=%x ulVar2=%x \n",ulVar1,ulVar2); //输出:ulVar1=0 ulVar2=abcd1234 return 0; }

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perbezaan antara php dan c# ialah: 1. Sistem jenis bahasa adalah berbeza, PHP adalah dinamik, manakala C# adalah jenis statik 2. Platform yang digunakan adalah berbeza, PHP boleh mencapai cross-platform, manakala C# adalah eksklusif untuk Windows 3; . Paradigma pengaturcaraan adalah berbeza, PHP Ia menyokong pengaturcaraan berorientasikan objek, prosedural dan berfungsi, dan C# lebih cenderung kepada pengaturcaraan berorientasikan objek 4. Kelajuan pelaksanaan berbeza, PHP lebih cepat, dan C# agak perlahan; Senario aplikasi adalah berbeza, PHP digunakan dalam pembangunan web, pelayan, dll. C# digunakan untuk desktop Windows dan aplikasi web.

Dalam tutorial ini, kami akan membincangkan program untuk mencipta alat pemformatan kodC/C++dengan alat bantuanhelpofclang.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5 Kami kemudiannya akan mencipta fail Python di lokasi yang pengguna semasa mempunyai kebenaran membaca dan menulis. Contoh importoscpp_extensions=(".cxx",".cpp&

Saiz elemen jenis struktur yang diperoleh oleh sizeof() tidak selalu sama dengan saiz setiap ahli individu. Kadangkala pengkompil menambah beberapa padding untuk mengelakkan masalah penjajaran. Jadi dimensi mungkin berubah. Padding ditambah apabila anggota struktur diikuti oleh anggota bersaiz lebih besar atau berada di hujung struktur. Penyusun yang berbeza mempunyai jenis kekangan penjajaran yang berbeza. Dalam piawaian C, jumlah struktur penjajaran adalah bergantung kepada pelaksanaan. Kes 1 Dalam kes ini, z berganda ialah 8 bait panjang, yang lebih besar daripada x (4 bait)). Jadi 4 bait lagi padding ditambah. Selain itu, data jenis pendek y mempunyai 2 bait ruang dalam ingatan, jadi 6 bait tambahan ditambah sebagai padding. Contoh kod #include<stdio.h>structmyS
![Satu artikel menerangkan secara terperinci konfigurasi vscode C/C++ menjalankan persekitaran [pengajaran peringkat pengasuh]](https://img.php.cn/upload/article/000/000/024/63fc94eb8852a975.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Bagaimana untuk membangunkan C/C++ dalam VScode? Bagaimana untuk mengkonfigurasi persekitaran C/C++? Artikel berikut akan berkongsi dengan anda tutorial persekitaran berjalan C/C++ konfigurasi VScode (pengajaran peringkat pengasuh).

Di sini kita lihat apa itu pra-kenaikan dan pasca-kenaikan dalam C atau C++. Kedua-dua pra-kenaikan dan pasca-kenaikan adalah pengendali kenaikan. Tetapi terdapat sedikit perbezaan antara mereka. Operator pra-kenaikan mula-mula menambah nilai pembolehubah dan kemudian memberikannya kepada pembolehubah lain, tetapi dalam kes pengendali selepas kenaikan, ia mula-mula memberikan kepada pembolehubah dan kemudian menambah nilai. Contoh #include<iostream>usingnamespacestd;main(){ intx,y,z x=10;&nb;

Fungsi strcpy() ialah fungsi perpustakaan standard. Ia digunakan untuk menyalin satu rentetan ke rentetan yang lain. Dalam bahasa C, ia diisytiharkan dalam fail pengepala "string.h", manakala dalam bahasa C++, ia diisytiharkan dalam fail pengepala cstring. Ia mengembalikan penunjuk ke destinasi. Ini ialah sintaks strcpy() dalam bahasa C, char*strcpy(char*dest,constchar*src); Ia menyalin keseluruhan rentetan ke dalam rentetan sasaran. Ia menggantikan keseluruhan rentetan dan bukannya menambahkannya. Ia tidak mengubah rentetan sumber. Berikut ialah contoh strcpy() dalam bahasa C: Contoh Demo Dalam Talian#in

Di sini kita akan melihat cara mengira bilangan sifar mengekor dalam hasil pemfaktoran sebarang nombor. Oleh itu, jika n=5, maka 5! =120. Hanya ada satu di belakang 0. Untuk 20!, ia akan menjadi 4 sifar sebagai 20!=2432902008176640000. Cara paling mudah ialah mengira faktorial dan mengira 0. Tetapi untuk nilai n yang lebih besar, pendekatan ini gagal. Jadi kita akan mengambil pendekatan lain. Jika faktor perdana ialah 2 dan 5, maka sifar tertinggal akan muncul. Jika kita mengira 2 dan 5, kita boleh mendapatkan hasilnya. Untuk melakukan ini, kami akan mengikuti peraturan ini. Mengekori 0 = Mengira algoritma untuk 5 dalam faktorial (n) kiraan faktor perdanaTrailingZeros(n)mula &

Dalam bahagian ini, kita akan melihat cara untuk melaksanakan kedua-dua bahagian if dan else dalam kod C atau C++. Penyelesaian ini agak rumit. Apabila if dan else dilaksanakan satu demi satu, seolah-olah pernyataan tanpa if-else telah dilaksanakan. Tetapi di sini kita akan melihat bagaimana untuk melaksanakannya secara berurutan jika wujud. Contoh kod #include<iostream>usingnamespacestd;intmain(){ intx=10;
