<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie du code n'a rien à voir avec le contenu de l'article,En tant qu'exemple de code préfixe uniquement</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Démarrer l'exécution PHP Scénario...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
* base_convert() Lors du traitement de la conversion binaire négative en fonction,Quelles sont les précautions?
*
* base_convert() Oui PHP Une fonction intégrée,Utilisé pour convertir les chaînes numériques entre différents chiffres。
* 它的函数签名Oui:string base_convert(string $number, int $from_base, int $to_base)
*
* Mais en usage réel,base_convert() Il ne prend pas en charge le traitement direct des nombres négatifs。
* Les éléments suivants expliquent en détail plusieurs points clés pour faire attention lors de la conversion des nombres négatifs et des nombres partiels.。
*/</span>
</span><span><span class="hljs-comment">// 1. base_convert() L'entrée négative n'est pas prise en charge</span></span><span>
</span><span><span class="hljs-comment">// base_convert() Reçu $number 参数Oui字符串形式的数字,且该数字只能Oui非负整数。</span></span><span>
</span><span><span class="hljs-comment">// Si une chaîne avec un signe négatif est passé(comme "-15"),Les fonctions ignorent les signes négatifs en tant que caractères illégaux,Provoque des résultats incorrects。</span></span><span>
</span><span><span class="hljs-comment">// Exemple</span></span><span>
</span><span><span class="hljs-variable">$negativeNumber</span></span><span> = </span><span><span class="hljs-string">"-15"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$negativeNumber</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Convertir le résultat(Entrez avec un signe négatif): <span class="hljs-subst">$result</span></span></span><span>\n";
</span><span><span class="hljs-comment">// Le résultat de sortie ignorera le signe négatif,Équivalent à la conversion“15”,并不Oui期望的负数二进制表示。</span></span><span>
</span><span><span class="hljs-comment">// 2. Façons courantes de gérer les nombres négatifs</span></span><span>
</span><span><span class="hljs-comment">// parce que base_convert() La conversion négative n'est pas prise en charge,通常的做法Oui先检测数字的正负号,</span></span><span>
</span><span><span class="hljs-comment">// Ensuite, la valeur absolue est convertie de manière binaire,Enfin, ajoutez un signe négatif manuellement。</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">base_convert_negative</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$from_base</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$to_base</span></span><span>): </span><span><span class="hljs-title">string</span></span><span> {
</span><span><span class="hljs-variable">$isNegative</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span> && </span><span><span class="hljs-variable">$number</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] === </span><span><span class="hljs-string">'-'</span></span><span>) {
</span><span><span class="hljs-variable">$isNegative</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>;
</span><span><span class="hljs-variable">$number</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
}
</span><span><span class="hljs-variable">$converted</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base_convert</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>, </span><span><span class="hljs-variable">$from_base</span></span><span>, </span><span><span class="hljs-variable">$to_base</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$isNegative</span></span><span> ? </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$converted</span></span><span> : </span><span><span class="hljs-variable">$converted</span></span><span>;
}
</span><span><span class="hljs-comment">// test</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">base_convert_negative</span></span><span>(</span><span><span class="hljs-string">"-15"</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>; </span><span><span class="hljs-comment">// Sortir:-1111</span></span><span>
</span><span><span class="hljs-comment">// 3. Limites de plage pour la conversion du</span></span><span>
</span><span><span class="hljs-comment">// base_convert() 支持的进制范围Oui 2 arriver 36。</span></span><span>
</span><span><span class="hljs-comment">// comme果试图转换超出这个范围的进制,La fonction renvoie une chaîne vide。</span></span><span>
</span><span><span class="hljs-comment">// Donc, lorsqu'il s'agit de nombres négatifs,Il est également nécessaire de s'assurer que la division entrante est légale。</span></span><span>
</span><span><span class="hljs-comment">// 4. L'expression partielle des nombres négatifs</span></span><span>
</span><span><span class="hljs-comment">// Dans certains scénarios,Il peut être souhaitable de représenter des nombres négatifs sous forme de complément。</span></span><span>
</span><span><span class="hljs-comment">// mais base_convert() 只Oui简单转换数值,Aucun support pour le complément ou la conversion signée。</span></span><span>
</span><span><span class="hljs-comment">// comme果需要补码表示,L'opération et le formatage des bits doivent être gérés par vous-même。</span></span><span>
</span><span><span class="hljs-comment">// 5. Résumer</span></span><span>
</span><span><span class="hljs-comment">// - base_convert() La conversion directe des nombres moins n'est pas prise en charge。</span></span><span>
</span><span><span class="hljs-comment">// - Les signes négatifs doivent être séparés manuellement,Convertir la valeur absolue,Ajouter un signe négatif。</span></span><span>
</span><span><span class="hljs-comment">// - La division doit être en 2 arriver 36 entre。</span></span><span>
</span><span><span class="hljs-comment">// - Le code du complément ou d'autres représentations binaires négatives doivent être implémentées par vous-même。</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>