目次
問題の解決を開始します
function rev($n)
{
$xxoo = 0;
for ($i = 0; $i < 8; $i++) {
$xxoo = $xxoo << 1;
if (($n & 1) == 1) {
$xxoo++;
}
$n = $n >> 1;
}
return $xxoo;
}
echo decbin(rev(5));
ログイン後にコピー
" > 完全なコードは次のとおりです。以下に続きます
function rev($n)
{
$xxoo = 0;
for ($i = 0; $i < 8; $i++) {
$xxoo = $xxoo << 1;
if (($n & 1) == 1) {
$xxoo++;
}
$n = $n >> 1;
}
return $xxoo;
}
echo decbin(rev(5));
ログイン後にコピー
echo rev(4);
echo rev(43261596);
ログイン後にコピー
" >Call test
echo rev(4);
echo rev(43261596);
ログイン後にコピー
ホームページ バックエンド開発 PHPチュートリアル インタビュー質問:バイナリビット反転の実装アイデアの説明(PHP一般版)

インタビュー質問:バイナリビット反転の実装アイデアの説明(PHP一般版)

Oct 15, 2019 am 10:18 AM
バイナリ アルゴリズム

これは面接の質問ですが、理解できないと表明した学生もいました。簡単なトレーニングをすることは難しくありませんが、完璧な比較を書くには基礎力が試され、論理的思考力も必要となります。生徒の方向性が PHP であるため、PHP を使用して説明します。また、PHP を学習することが重要ではないこともわかります。エコー「hello world」を 2 文書くか、Web ページにループ出力することができれば、PHP を呼び出すことができると言われています。

# ここでいくつかの知識を紹介します: (推奨される学習: PHP ビデオ チュートリアル)

##1 、数値は 1 バイト、つまり 8 ビットを占めます。

たとえば、10 進数の 1 は、コンピュータでは 2 進数で 00000001 と表現されます (10 進数を 2 進数に変換するのを忘れた場合は、Baidu に問い合わせてください。以下の内容は理解できないので忘れてください~~~)

PHP では

echo bindec("00000001");   //bindec函数可以让你体会到 二进制和10进制之间的 骚转换<br/>
ログイン後にコピー

#2 を使用できます。10 進数の加算 1 1 =2 (このヒントは非常に重要です) ~~、よく理解してください)

ディスプレイスメントでそれを行うにはバイナリを使用してください

答え: 00000010 これは正確に 2 (2 の 1 乗) です。

10 進数の 2 1=3 はどうでしょうか?


答え: 00000011 これはちょうど 3 (2 の 1 乗、2 の 0 乗 = 2 1 = 3)

では、10進数の3 1=4はどうでしょうか?


答え: 00000100 これは 4 (2 の 2 乗) です。

それでは、10 進数の 4 1=5 はどうでしょうか?


答え: 00000101 この男は 4 (2 の 2 乗、2 の 0 乗 = 4 1 = 5)

問題の解決を開始します

2 進数 00000101 があるとします。今度はそれを逆さまにして 10100000 に変える必要があります。どうやって遊ぶのですか?

答えはインターネット上にたくさんあるので、以下のアイデアについて話しましょう:


1. まず、2 つの変数 が必要です。

1) 一時変数は $xxoo と呼ばれ、初期値は 0 (10 進数)、バイナリでは 00000000

です。 2) 元の値変数は $shit と呼ばれ、00000101 ~

2. 3 つのステップ

1) $xxoo を 1 ビット左に移動します

2) バイナリの最後の桁かどうかを判断します$shit の値は 1 です。そうであれば、$ を与えます。xxoo の 10 進数の値は 1 増加します。これを 2 進数とみなして 00000000 を 00000001 に変更することが非常に重要です。そうでない場合、$xxoo の初期値は 00000000 です。これはp ずつずらしてください。 。 。それらはすべて 0 なので、2 進数の最後のビットが 1 であるかどうかをどのように判断するのでしょうか?文字列または正規表現をインターセプトして判断する必要があります(不可能ではありません)

回答: 元の値と 1 (つまり 00000001) の論理 AND 演算を実行するだけです (1&1 は 1) 、1&0 または 0&1 は常に 0)

3) 次に、$shit を 1 桁右に移動します

1) 元々 00000101 だった場合、00000010 になります移動後 (つまり、$xxoo と shit が同時に左に 1 つ、右に 1 つ移動されます。shit の最後のビットが 1 であれば、それを判断できるので、$ の最後のビットはxxoo も 1 に設定して、xxoo と shit の両方を実現します。同期と逆)

上記の処理を 8 回繰り返して、10100000

完全なコードは次のとおりです。以下に続きます
function rev($n)<br/>{<br/>    $xxoo = 0;<br/>    for ($i = 0; $i < 8; $i++) {<br/>        $xxoo = $xxoo << 1;<br/>        if (($n & 1) == 1) {<br/>            $xxoo++;<br/>        }<br/>        $n = $n >> 1;<br/>    }<br/>    return $xxoo;<br/>}<br/>echo decbin(rev(5));<br/>
ログイン後にコピー

ただし、注意してください。上記の関数は半角数字をサポートしています (8 桁のみをサポートしています)

オンライン面接の質問は 32 です。 -bit 数値、および次のコードは

一般数字 (このコードはオンラインでは利用できません~~~)。考えて理解しましょう。あまり説明はしません。PHP コードのスキルが必要です:

function rev($n)<br/>{<br/>    $num=intval(strlen(decbin($n))/8); //整除 8<br/>    if($num==0)<br/>        $bitLen=8;//最小8位<br/>    else<br/>    {<br/>        if((strlen(decbin($n)) % 8)>0)<br/>            $bitLen=($num+1)*8;<br/>        else<br/>            $bitLen=$num*8;<br/>    }<br/>    echo “原始值二进制:”.str_pad(decbin($n),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/>    $xxoo = 0;<br/>    for ($i = 0; $i < $bitLen; $i++) {<br/>        $xxoo = $xxoo << 1;<br/>        if (($n & 1) == 1) {<br/>            $xxoo++;<br/>        }<br/>        $n = $n >> 1;<br/>    }<br/>    echo “反转后值二进制:”.str_pad(decbin($xxoo),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/>    return $xxoo;<br/>}<br/>
ログイン後にコピー

Call test
echo rev(4);<br/>echo rev(43261596);<br/>
ログイン後にコピー

結果
原始值二进制:00000100<br/>反转后值二进制:00100000<br/>32原始值二进制:00000010100101000001111010011100<br/>反转后值二进制:00111001011110000010100101000000<br/>964176192<br/>
ログイン後にコピー

以上がインタビュー質問:バイナリビット反転の実装アイデアの説明(PHP一般版)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 Mar 26, 2024 pm 12:41 PM

上記および筆者の個人的な理解: 現在、自動運転システム全体において、認識モジュールが重要な役割を果たしている。道路を走行する自動運転車は、認識モジュールを通じてのみ正確な認識結果を得ることができる。下流の規制および制御モジュール自動運転システムでは、タイムリーかつ正確な判断と行動決定が行われます。現在、自動運転機能を備えた自動車には通常、サラウンドビューカメラセンサー、ライダーセンサー、ミリ波レーダーセンサーなどのさまざまなデータ情報センサーが搭載されており、さまざまなモダリティで情報を収集して正確な認識タスクを実現しています。純粋な視覚に基づく BEV 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 Jun 03, 2024 pm 01:25 PM

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる Apr 02, 2024 pm 05:36 PM

C++sort 関数の最下層はマージ ソートを使用し、その複雑さは O(nlogn) で、クイック ソート、ヒープ ソート、安定したソートなど、さまざまなソート アルゴリズムの選択肢を提供します。

二進数の計算方法 二進数の計算方法 Jan 19, 2024 pm 04:38 PM

2 進数演算は 2 進数に基づいた演算方法であり、その基本演算には加算、減算、乗算、除算が含まれます。 2 進算術には、基本的な演算に加えて、論理演算、変位演算、その他の演算も含まれます。論理演算には AND、OR、NOT などの演算が含まれ、変位演算には左シフト演算と右シフト演算が含まれます。これらの操作には、対応するルールとオペランド要件があります。

改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 Jun 06, 2024 pm 12:33 PM

01 今後の概要 現時点では、検出効率と検出結果の適切なバランスを実現することが困難です。我々は、光学リモートセンシング画像におけるターゲット検出ネットワークの効果を向上させるために、多層特徴ピラミッド、マルチ検出ヘッド戦略、およびハイブリッドアテンションモジュールを使用して、高解像度光学リモートセンシング画像におけるターゲット検出のための強化されたYOLOv5アルゴリズムを開発しました。 SIMD データセットによると、新しいアルゴリズムの mAP は YOLOv5 より 2.2%、YOLOX より 8.48% 優れており、検出結果と速度のバランスがより優れています。 02 背景と動機 リモート センシング技術の急速な発展に伴い、航空機、自動車、建物など、地表上の多くの物体を記述するために高解像度の光学式リモート センシング画像が使用されています。リモートセンシング画像の判読における物体検出

人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる 人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる Mar 22, 2024 pm 10:10 PM

人工知能 (AI) と法執行機関の融合により、犯罪の予防と検出の新たな可能性が開かれます。人工知能の予測機能は、犯罪行為を予測するためにCrimeGPT (犯罪予測技術) などのシステムで広く使用されています。この記事では、犯罪予測における人工知能の可能性、その現在の応用、人工知能が直面する課題、およびこの技術の倫理的影響について考察します。人工知能と犯罪予測: 基本 CrimeGPT は、機械学習アルゴリズムを使用して大規模なデータセットを分析し、犯罪がいつどこで発生する可能性があるかを予測できるパターンを特定します。これらのデータセットには、過去の犯罪統計、人口統計情報、経済指標、気象パターンなどが含まれます。人間のアナリストが見逃す可能性のある傾向を特定することで、人工知能は法執行機関に力を与えることができます

58 ポートレート プラットフォームの構築におけるアルゴリズムの適用 58 ポートレート プラットフォームの構築におけるアルゴリズムの適用 May 09, 2024 am 09:01 AM

1. 58 Portraits プラットフォーム構築の背景 まず、58 Portraits プラットフォーム構築の背景についてお話ししたいと思います。 1. 従来のプロファイリング プラットフォームの従来の考え方ではもはや十分ではありません。ユーザー プロファイリング プラットフォームを構築するには、複数のビジネス分野からのデータを統合して、ユーザーの行動や関心を理解するためのデータ マイニングも必要です。最後に、ユーザー プロファイル データを効率的に保存、クエリ、共有し、プロファイル サービスを提供するためのデータ プラットフォーム機能も必要です。自社構築のビジネス プロファイリング プラットフォームとミドルオフィス プロファイリング プラットフォームの主な違いは、自社構築のプロファイリング プラットフォームは単一のビジネス ラインにサービスを提供し、オンデマンドでカスタマイズできることです。ミッドオフィス プラットフォームは複数のビジネス ラインにサービスを提供し、複雑な機能を備えていることです。モデリングを提供し、より一般的な機能を提供します。 2.58 中間プラットフォームのポートレート構築の背景のユーザーのポートレート 58

Golang でバイナリ ファイルを読み取るにはどうすればよいですか? Golang でバイナリ ファイルを読み取るにはどうすればよいですか? Mar 21, 2024 am 08:27 AM

Golang でバイナリ ファイルを読み取るにはどうすればよいですか?バイナリ ファイルは、コンピュータが認識して処理できるデータを含む、バイナリ形式で保存されたファイルです。 Golang では、いくつかのメソッドを使用してバイナリ ファイルを読み取り、必要なデータ形式に解析できます。 Golangでバイナリファイルを読み込む方法と具体的なコード例を紹介します。まず、OS パッケージの Open 関数を使用してバイナリ ファイルを開く必要があります。これにより、ファイル オブジェクトが返されます。それから私たちは作ることができます

See all articles