主頁 > 後端開發 > BCH信道編譯碼

BCH信道編譯碼

2020-09-24 21:51:20 後端開發

通信的目的是要把對方不知道的訊息即時可靠地(有時還要秘密地)傳送給對方,當信道中存在干擾,可能使發送的訊息出錯,數字通信中,通常使用糾錯碼技術來進行差錯控制,這樣可以提高資料傳輸的可靠性,

BCH碼就是一種應用廣泛的能糾正多重錯誤的分組碼,具有極佳的糾錯性能,本文對BCH碼的原理進行深入分析,介紹BCH的編解碼原理,重點介紹了BCH編碼解碼的計算方法以及BCH編碼的性能分析,最后,本文采用MATLAB撰寫相應的BCH編解碼代碼進行仿真和誤碼率分析,并在Simulink中搭建BCH模塊進行誤碼率統計分析,本文所作的研究成果具有一定的科研價值,為BCH的進一步研究或在硬體系統上的實作提供了良好的理論基礎,

1.1 本課題研究背景

數字信號在傳輸系統中傳輸時,不可避免受到各種因素的干擾,使到達接收端的數字信號中混有噪聲,從而引發錯誤判決,為了抗擊干擾,必然要利用糾錯碼的差錯控制技術,

糾錯碼的分類有以下幾種:

·按照對資訊序列處理方式的不同,分為分組碼與卷積碼兩大類,在分組碼中按照碼的結構特點,又可分為回圈碼和非回圈碼,

·根據資訊位與校驗位之間的關系分為線性碼與非線性碼,

·按照適用的差錯型別,分成糾隨機差錯碼和糾突發差錯碼兩種,也有介于中間的糾隨機/突發差錯碼,

·按構碼理論,有代數、幾何、算術、組合碼等,

除了上述分類外,有多少觀察問題的角度,就有多少分類方法,比如,按每個碼元的取值,可以分為二進制碼與多進制碼;按碼字之間的關系,有回圈碼和非回圈碼之分;不同的分類方法只是從不同的角度抓住碼的某一特性加以歸類而己,并不能說明某個碼的為全部特性,比如某線性碼可能同時又是分組碼,回圈碼,糾突發差錯碼,代數碼,二進碼,

1.2 線性分組碼和回圈碼

線性分組碼是分組碼中最重要的一類碼,用(n,k)表示,其中n表示碼長,k表示資訊位數目,n-k=r表示校驗位數目,二進制(n,k)線性分組碼可以定義為GF(2)域上的n維線性空間Vn中的一個k維子空間,

在線性分組碼中有三個重要引數,分別為碼率、碼的漢明距離和漢明重量,碼率R=k/n,它說明了分組碼傳輸資訊的有效性,碼的漢明距離指兩個碼字對應位上碼元不同的個數,簡稱距離,漢明重量指碼字中非零碼元的個數,簡稱重量,在(n,k)線性分組碼中,將任兩個碼字距離的最小值稱為最小距離d0,由于線性分組碼是群碼,由群碼的封閉性可知,若碼字C1,C2均是(n,k)碼的碼字,則C1+C2也必是該分組碼的另一碼字,可見(n,k)線性分組碼的最小距離等于非零碼字的最小重量,最小距離d,直接在理論上決定了該碼的檢錯和糾錯能力,

回圈碼是線性分組碼中最重要的一個子類,它的代數結構比較清晰,編譯碼相對于其它碼來講簡單且易于實作,因此回圈碼在差錯控制系統中得到廣泛的應用,BCH碼就是回圈碼中很重要的一類碼,

在GF(2)上的n維線性空間氣中,若是的一個k維子空間,對任何,有,則是回圈碼,

由編碼理論推匯出的回圈碼糾錯能力只是一個理論值,在現實中能否達到這個理論值還與所用的譯碼方法有關,一個好的譯碼方法,不僅應使糾錯能力能夠達到理論極限,而且應能高速度、低成本地實作,因為速度和成本有時會成為某種碼能否實用的決定性因素,

譯碼電路通常要比編碼電路復雜得多,因此我們說,理論的復雜性常體現在編碼上,而工程的復雜性常體現在譯碼上,從對輸入信號的量化程度,譯碼可分為硬判決譯碼(BSC信道)和軟判決譯碼(DMC信道),

軟判決由于采用了大于2的量化級數,能更充分地利用接收信號包含的資訊,與硬判決相比,在AWGN信道、10-2-10幣誤碼率范圍時可有2dB的編碼增益,因此代表了譯碼的發展方向,從差錯控制方式,譯碼可分為糾錯和檢錯兩種,糾錯譯碼器總有輸出,但有兩種可能:一是收碼的差錯數量在糾錯能力之內,譯碼器認定的正確真的是正確,二是差錯數量超出糾錯能力,譯碼器認定的正確其實是錯的,由于難以判斷差錯數量是否超出糾錯能力,糾錯譯碼器不能保證輸出資料完全可靠,所以糾錯譯碼器常用于數字語音、影像、視頻信號的前向糾錯(FEC)中,

1.3 BCH編碼的研究和應用

BCH碼于1959年由霍昆格姆、1960年由博和雷-查德胡里三人分別提出,并以這三個發現者的名字命名,BCH碼是迄今為止所發現的一類很好的線性糾錯碼類,它的糾錯能力很強,特別在中等和短碼長條件下,BCH碼的性能接近理論上的最佳值,并且構造方便,編碼簡單,特別是它具有嚴密的代數結構,在代數編碼理論中起著重要作用,BCH碼是迄今為止研究得最為詳盡、了解得最為透徹、取得成果最多的一類線性分組碼,

1960年彼得遜從理論上解決了二進制BCH碼的譯碼演算法,奠定了BCH碼譯碼的理論基礎,稍后,格林斯坦和齊勒爾把它推廣到多進制,1966年伯利坎普利用迭代演算法譯BCH碼,從而大大加快了譯碼速度,從實際上解決了BCH碼的譯碼問題,由于BCH碼性能優良,結構簡單,編譯碼設備也不太復雜,使得它在實際使用中受到工程技術人員的歡迎,是目前用得最廣泛的碼類之一,

在英國模擬移動通信系統中,基站采用了具有糾正2位隨機錯誤能力的BCH(40,28)碼,移動臺采用了可糾正2位隨機錯誤的BCH(48,36)碼;在我國無線尋呼系統中,采用了BCH(31,21)碼加一位奇偶校驗位作為FEC方式;在視頻編碼協議H.261、H.263中采用了BCH(511,493)碼進行視頻糾錯,

第三章 BCH碼理論簡介

3.1 BCH碼簡介

BCH碼是回圈碼的一個重要子類,它具有糾多個錯誤的能力,BCH碼有嚴密的代數理論,是目前研究最透徹的一類碼,它的生成多項式與最小碼距之間有密切的關系,人們可以根據所要求的糾錯能力t很容易構造出BCH碼,它們的譯碼器也容易實作,是線性分組碼中應用最普遍的一類碼,

3.1.1伽羅華域

編碼原理中最基本、最重要的域是二元伽羅華域GF(2)及二元擴域GF(2m),有限正數集合F={0,1,2,3,…,q-1}(q是素數)在模q加、模q乘運算下構成一個q階有限域,又稱伽羅華(Galois)域,記為GF(q),當q=2時,就是二元域GF(2),

在有限域中定義的運算滿足閉合性,即有限域GF(q)上任意兩個元素A、B對運算⊙滿足:A⊙B∈GF(q),

如果p是素數,m是正整數,GF(2m)的最小子域是GF(p),p稱為GF(2m)的特征,在特征為2的伽羅華域中,任一域元素B有-B=B,

設B為GF(q)上的任一元素,則B=Bq,

每個伽羅華域GF(q)至少包含有一個本原元素α,且GF(q)上除零以外的其它任意域元素均可表示為本原元素的乘冪,

任一有限域均可由一本原多項式來構成,有限域的任一多項式對本原多項式求模,可得到一個次數低于本原多項式次數的多項式,即有限域的元素,

·加法運算

域元素的加法運算,即根據域元素表格,轉換成對應的m-1次多項式系數(m重矢量),兩個域元素相加等效于兩個m-1次多項式的同次項系數模2相加,即異或運算,

·乘法運算

乘法有三種實作途徑:

第一就是把域元素對應的多項式系數直接移位,比如a×b,只要找到b對應的冪次,假設是x,將a左移x次,每次左移之前判斷移位前的值高位是否為1,如果是1,移位后與本原多項式除高次冪后的多項式相加;

第二種方法就是從b的高位開始,如果b7=1,將a左移7次,如果b6=1,將前面左移結果再左移6次,

第三種方法是直接把域元素的指數相加求模2m-1,這里采用第三種方法,

·求模運算

因為2^m-1轉換成二進制數永遠是全1,所以根據這個特點,可以用下面的方法求模,把二進制形式的數從低位起每m位元分割,高位不滿m位元用0補齊,然后高位段每出現一個1,就把高位減去1,然后把低位加1,這樣回圈操作直到高位段變成全0,

3.3 BCH譯碼理論介紹

BCH碼的譯碼可以分為時域譯碼和頻域譯碼兩種,

頻域譯碼是把碼字看作一個時域數字序列,對其進行有限域的離散傅氏變換(DFT)將它變換到頻域,然后利用其頻域特點譯碼,這樣通過對頻域伴隨式的運算解出指示差錯位置的關鍵方程,再通過離散傅氏反變化還原成時域的糾錯信號,

時域譯碼是把碼字看作時間軸上的信號序列,利用碼的代數結構進行譯碼,由于取有限域離散傅氏變換增加了復雜度,頻域譯碼的實作一般較時域譯碼復雜,因此采用快速傅氏變換(FFT)的頻域譯碼只在某些特殊情況下對特定碼長(比如n等于2的冪次)的譯碼優于時域譯碼,而在一般情況下應用最廣泛的是時域譯碼,其中BCH譯碼器的基本結構如下所示:

圖3-1 BCH譯碼器基本結構框圖

通常,我們在MATLAB中設計演算法分三個步驟:

·STEP1:由接收到的R(x)計算出伴隨式S;

·STEP2:由伴隨式得出錯誤圖樣E(x);

·STEP3由R(x)-E(x)得到估值碼字c(x),

5.2 BCH編碼的系統仿真

我們根據前面的理論分析,撰寫MATLAB代碼,這里,我們根據要求,進行(511,493)(4095,4035)兩種引數的BCH編碼,其MATLAB編碼函式如下所示:

function code=bchencoder(data,genpoly,n,k);

bb=zeros(1,n-k);

for i=k:-1:1

feedback = xor(data(i), bb(n-k));

if feedback~=0

for j=n-k:-1:2

if genpoly(n-k-j+2)~=0

bb(j)=xor(bb(j-1),feedback);

else

bb(j)=bb(j-1);

end

end

bb(1)=feedback;

else

for j=n-k:-1:2

bb(j)=bb(j-1);

end

bb(1)=feedback;

end

end

code=[bb,data];

我們在頂層對其進行呼叫,呼叫程序如下代碼:

for j=1:nwords

encoded_data((j-1)*n+1:(j-1)*n+n)=bchencoder(message((j-1)*k+1:(j-1)*k+k),genpoly,n,k);

end

輸入資訊為:

………… 1 1 0 1 1 0 0 1 1 1 …………………………

通過BCH編碼之后,得到BCH編碼資訊:

………… 1 1 0 0 0 1 0 0 1 0 …………………………

5.3 BCH譯碼的系統仿真

本系統譯碼我們將采用應用十分普遍的‘錢搜索’法進行譯碼,前面我們已經簡單的介紹了該演算法, 其MATLAB代碼實作程序如下所示:

lambda_v = zero;

accu_tb=gf(ones(1, t+1), m);

for i=1:n,

lambda_v=lambda*accu_tb';

accu_tb = accu_tb.*inverse_tb;

if(lambda_v==zero)

error(1,n-i+1)=1;

else

error(1,n-i+1)=0;

end

end

found = find(error(1,:)~=0);

for i=1:length(found)

location=found(i);

if location <= k;

rec_data(n-location+1)=rec_data(n-location+1)+one;

end

end

decoded_data((j-1)*k+1:(j-1)*k+k)=rec_data(n-k+1:n);

我們將編碼之后得到的信號輸入BCH譯碼部分,輸出結果:

………… 1 1 0 1 1 0 0 1 1 1 …………………………

5.2.4 不同引數的BCH編解碼性能分析

本章我們將重點對幾種不同引數的BCH碼進行了仿真,系統信噪比的分析我們主要采用:semilogy進行仿真,我們分別對(511,493)(4095,4035)進行仿真,然后不改變n,k兩個引數,改變其糾錯能力進行仿真,從而判斷BCH編解碼的性能,

圖5-1 n=511,k=493t=11條件下信噪比

圖5-2 n=4095,k=4035t=11條件下信噪比

圖5-3 BCH編碼和不編碼的性能對比(綠色為未通過編碼)

從仿真結果可以看出,對于糾錯能力相同的BCH碼,碼字長度短的相對碼字長度長的性能好,且平均仿真一個碼字所耗費的時間少,分析原因,是因為在相同的信道條件下,每個碼元出現錯誤的概率是相同的,對于碼字長度長的BCH碼,平均每個碼字中出現錯誤的碼元個數多,所以對于糾錯能力相同的BCH碼,碼字長度長的性能差,

以上我們詳細介紹了MATLAB的BCH編解碼和信噪比分析,下面我們將在Siumlink中進行BCH實際仿真,在本系統,我們將基于BPSK進行仿真分析,

不加BCH的BPSK系統如下所示:

圖5-4 BPSK仿真系統

其仿真結果如下所示:

加入BCH編解碼,其系統如下所示:

圖5-5 BCH仿真系統

其仿真結果如下所示:

由上圖可見,加上BCH編解碼后,新能得到大大改善,

·編碼和譯碼

clc;

clear;

close all;

m=9;%輸入引數6

k=493;%輸入引數4

snr=1;

n=2^m-1;

period=1000;

nwords = ceil(1000/k);

[genpoly,t] = bchgenpoly(n,k);

simplified = 1;

alpha = gf(2, m);

zero = gf(0, m);

one = gf(1, m);

message=randint(1,nwords*k);

message1=gf(message);

decoded_data=gf(zeros(1,nwords*k));

alpha_tb=gf(zeros(1, 2*t), m);

for i=1:2*t,

alpha_tb(i)=alpha^(2*t-i+1);

end;

%BCH編碼

for j=1:nwords

encoded_data((j-1)*n+1:(j-1)*n+n)=bchencoder(message((j-1)*k+1:(j-1)*k+k),genpoly,n,k);%由高位到低位

end

%添加噪聲

sigma=sqrt(1/(10^(snr/10))/2);

datalength=length(encoded_data);

snum=ceil(datalength/period);

for(i=1:snum-1)

data2((i-1)*period+1:(i-1)*period+period)=encoded_data((i-1)*period+1:(i-1)*period+period)+sigma*randn(1,period);

end

data2((snum-1)*period+1:datalength)=encoded_data((snum-1)*period+1:datalength)+sigma*randn(1,length(encoded_data((snum-1)*period+1:datalength)));

rec_data2=zeros(1,nwords*n);

for i=1:nwords*n

if abs(encoded_data(i)-data2(i))>0.5

rec_data2(i)=xor(encoded_data(i),1);

else

rec_data2(i)=encoded_data(i);

end

end

rec_data2=gf(rec_data2,m);

%BCH譯碼

for j=1:nwords

rec_data=rec_data2((j-1)*n+1:(j-1)*n+n);

syndrome=gf(zeros(1, 2*t), m);

for i=1:n,

syndrome=syndrome.*alpha_tb+rec_data(n-i+1);

end;

lambda = gf([1, zeros(1, t)], m);

lambda0= lambda;

b=gf([0, 1, zeros(1, t)], m);

b2 = gf([0, 0, 1, zeros(1, t)], m);

k1=0;

gamma = one;

delta = zero;

syndrome_array = gf(zeros(1, t+1), m);

if(simplified == 1)

for r=1:t,

r1 = 2*t-2*r+2;

r2 = min(r1+t, 2*t);

num = r2-r1+1;

syndrome_array(1: num) = syndrome(r1:r2);

delta = syndrome_array*lambda';

lambda0 = lambda;

lambda = gamma*lambda-delta*b2(2:t+2);

if((delta~= zero) && (k1>=0))

b2(3)=zero;

b2(4:3+t) = lambda0(1:t);

gamma = delta;

k1 = -k1;

else

b2(3:3+t) = b2(1:t+1);

gamma = gamma;

k1=k1+2;

end

joke=1;

end

else

for r=1:2*t,

r1 = 2*t-r+1;

r2 = min(r1+t, 2*t);

num = r2-r1+1;

syndrome_array(1:num) = syndrome(r1:r2);

delta = syndrome_array*lambda';

lambda0 = lambda;

lambda = gamma*lambda-delta*b(1:t+1);

if((delta ~= zero) && (k1>=0))

b(2:2+t)=lambda0;

gamma = delta;

k1=-k1-1;

else

b(2:2+t) = b(1:t+1);

gamma = gamma;

k1=k1+1;

end

joke=1;

end

end

inverse_tb = gf(zeros(1, t+1), m);

for i=1:t+1,

inverse_tb(i) = alpha^(-i+1);

end;

%錢搜索法

lambda_v = zero;

accu_tb=gf(ones(1, t+1), m);

for i=1:n,

lambda_v=lambda*accu_tb';

accu_tb = accu_tb.*inverse_tb;

if(lambda_v==zero)

error(1,n-i+1)=1;

else

error(1,n-i+1)=0;

end

end

found = find(error(1,:)~=0);

for i=1:length(found)

location=found(i);

if location <= k;

rec_data(n-location+1)=rec_data(n-location+1)+one;

end

end

decoded_data((j-1)*k+1:(j-1)*k+k)=rec_data(n-k+1:n);

end

·信噪比仿真

clc;

clear all;

close all;

%引數設定%(511,493)(4095.4035)

givenSNR=0.5:0.5:9.5; %]

% N=511;

% K=493;

N=4095;

K=4035;

T=11;

times=length(givenSNR);

%計算幾個值

r=K/N;

Eb_N0=10.^(givenSNR./10);

sigma=(1./(2*r.*Eb_N0).^0.5);

message=randint(times,K,[0,1]);

msg=gf(message);

BCHcode_gf=bchenc(msg,N,K);

%BCH編碼

BCHcode_double=-1*ones(times,N);

for code_i=1:times

for code_j=1:N

if BCHcode_gf(code_i,code_j)==1

BCHcode_double(code_i,code_j)=1;

end

end

end

%添加噪聲

for noise_i=1:length(sigma)

BCH_receive(:,:,noise_i)=BCHcode_double+sigma(noise_i)*randn(times,N);

end

for noise_i=1:length(sigma)

for hard_i=1:times

for hard_j=1:N

if BCH_receive(hard_i,hard_j,noise_i)>0

hard_coded(hard_i,hard_j,noise_i)=1;

end

end

end

end

%BCH解碼

BCHdecode=gf(zeros(times,K,length(sigma)));

for noise_i=1:length(sigma)

hard_BCH=hard_coded(:,:,noise_i);

[BCHdecode_i,error_num]=bchdec(gf(hard_BCH),N, K);

BCHdecode(:,:,noise_i)=BCHdecode_i;

end

BCHdecode_double=zeros(times,K);

for noise_i=1:length(sigma)

for gf_to_double_i=1:times

for gf_to_double_j=1:K

if BCHdecode(gf_to_double_i,gf_to_double_j,noise_i)==1

BCHdecode_double(gf_to_double_i,gf_to_double_j,noise_i)=1;

end

end

end

end

for noise_i=1:length(sigma)

error_BCHcoded_num(noise_i)=sum(sum((abs(BCHdecode_double(:,:,noise_i)-message))));

end

coded_error_rate=error_BCHcoded_num/times/K

semilogy(givenSNR,coded_error_rate,'-*');

ylabel('BER');

xlabel('Eb/N0');

grid on;

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121514.html

標籤:python

上一篇:【面經】北大醫信一面

下一篇:【技術普及】國標GB28181協議內SIP監控域互聯結構解釋

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more