Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产精品久久久久激情影院,日本在线不卡一区二区,日韩一级片在线

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JS基本數據類型BigInt

          JavaScript 中,有一個特殊的數據類型BigInt,它可以存儲非常大的整數,甚至可以存儲超過 2 的 32 次方的所有整數。

          BigInt是一種無符號整數類型,它可以表示任何正整數,包括無限大和無限小。JavaScript 中的BigInt使用二進制表示法,因此它的值是無限的,并且永遠不會溢出或產生舍入誤差。

          要創建BigInt對象,可以使用Number.bigInt方法。例如,以下代碼將創建一個非常大的整數:

          let bigInt = Number.bigInt(2**32 + 1);  

          在這個例子中,2**32 + 1是一個非常大的整數,它可以使用 32 位二進制表示。Number.bigInt方法將返回一個BigInt對象,可以表示這個非常大的整數。

          如何創建 BigInt ?

          可以用在一個整數字面量后面加 n 的方式定義一個 BigInt ,如:120n,或者調用函數BigInt()。

          const theBiggestInt = 9007199254740991n;
          const alsoHuge = BigInt(9007199254740991);
          console.log(theBiggestInt, alsoHuge);
          // 9007199254740991n 9007199254740991n

          安全整數的范圍

          超過這個范圍,number類型的數字將會失去精度

          Number.MAX_SAFE_INTEGER
          // ? 99007199254740991    最大安全整數
          
          Number.MIN_SAFE_INTEGER
          // ? -99007199254740991   最小安全整數
          

          如何使用BigInt

          1. 可以用在一個整數字面量后面加 n 的方式定義一個 BigInt ,如:10n,
          2. 或者調用構造函數 BigInt()(不能使用 new 運算符)并傳遞一個整數值或字符串值。
          const theBiggestInt = 9007199254740991n;
          
          const alsoHuge = BigInt(9007199254740991);
          // ? 9007199254740991n
          
          const hugeString = BigInt("9007199254740991");
          // ? 9007199254740991n
          
          const hugeHex = BigInt("0x1fffffffffffff");
          // ? 9007199254740991n
          const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
          // ? 9007199254740991n

          BigInt類型判斷

          typeof 123
          // ? 'number'
          typeof 123n
          // ? 'bigint'
          typeof BigInt(123)
          // ? ''bigint'

          BigInt運算

          但是BigInt不支持單獨使用運算符+,因為會默認為轉換成Number,這是不允許的。

          const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
          // ? 9007199254740991n
          
          const maxPlusOne = previousMaxSafe + 1n;
          // ? 9007199254740992n
          
          const theFuture = previousMaxSafe + 2n;
          // ? 9007199254740993n, this works now!
          
          const multi = previousMaxSafe * 2n;
          // ? 18014398509481982n
          
          const subtr = multi – 10n;
          // ? 18014398509481972n
          
          const mod = multi % 10n;
          // ? 2n
          
          const bigN = 2n ** 54n;
          // ? 18014398509481984n
          
          bigN * -1n
          // ? –18014398509481984n
          
          const expected = 4n / 2n;
          // ? 2n
          
          const rounded = 5n / 2n;
          // ? 2n, not 2.5n
          

          BigInt比較大小

          // 不嚴格相等,嚴格不相等
          0n === 0
          // ? false
          
          0n == 0
          // ? true
          
          
          // Number 和 BigInt 可以直接比較。
          1n < 2
          // ? true
          
          2n > 1
          // ? true
          
          2 > 2
          // ? false
          
          2n > 2
          // ? false
          
          2n >= 2
          // ? true
          
          // BigInt可以和Number混入數組中進行排序
          const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
          // ?  [4n, 6, -12n, 10, 4, 0, 0n]
          
          mixed.sort();
          // ? [-12n, 0, 0n, 10, 4n, 4, 6]
          

          BigInt無法使用JSON.stringify()方法

          對任何 BigInt 值使用 JSON.stringify() 都會引發 TypeError,因為默認情況下 BigInt 值不會在 JSON 中序列化。但是,如果需要,可以實現 toJSON 方法:

          BigInt.prototype.toJSON = function() { return this.toString(); }
          // 現在可以
          JSON.stringify(BigInt(1));
          // ? '"1"'

          需要注意的是,BigInt對象是不可變的,也就是說,一旦創建,就無法更改其值。如果需要更改BigInt對象的值,必須創建一個新的BigInt對象。

          BigInt對象在 JavaScript 中主要用于處理非常大的整數,例如在密碼學和安全方面。

          總結

          1. BigInt不能和Number類型數據混合運算,兩者必須轉換成同一種數據類型。BigInt和Number聯眾類型互相轉換時,要注意可能會丟失精度
          2. BigInt和Numner可以直接作大小比較。
          3. BigInt可以和大部分運算符一起使用,除了單獨使用+,因為會默認強制轉化類型。
          4. BigInt作為條件判斷轉為Boolean時,和Number類型一致。
          5. 默認情況下BigInt無法在JSON中序列化
          6. bignumber.js 也是一種處理最大安全整數的方法
          7. BigInt不能調用Math中的方法

          扣 374. 猜數字大小

          題目描述

          猜數字游戲的規則如下:

          • 每輪游戲,我都會從 1 到 n 隨機選擇一個數字。請你猜選出的是哪個數字。
          • 如果你猜錯了,我會告訴你,你猜測的數字比我選出的數字是大了還是小了。

          你可以通過調用一個預先定義好的接口 int guess(int num) 來獲取猜測結果,返回值一共有 3 種可能的情況(-1,1 或 0):

          • -1:我選出的數字比你猜的數字小 pick < num
          • 1:我選出的數字比你猜的數字大 pick > num
          • 0:我選出的數字和你猜的數字一樣。恭喜!你猜對了!pick == num

          返回我選出的數字。

          示例 1:

          輸入:n = 10, pick = 6
          輸出:6

          示例 2:

          輸入:n = 1, pick = 1
          輸出:1

          示例 3:

          輸入:n = 2, pick = 1
          輸出:1

          示例 4:

          輸入:n = 2, pick = 2
          輸出:2

          提示:

          • 1 <= n <= 2^31 - 1
          • 1 <= pick <= n


          解決方案

          方法一:二分查找

          記選出的數字為 pick ,猜測的數字為 x 。根據題目描述,若 guess(x)≤0 則說明 x≥pick,否則 x<pick。

          根據這一性質我們可以使用二分查找來求出答案 pick。

          二分時,記當前區間為[left,right],初始時 left=1,right=n。記區間中間元素為 mid,若有 guess(mid)≤0 則說明 pick∈[left,mid],否則 pick∈[mid+1,right]。當區間左右端點相同時,則說明我們找到了答案,退出循環。

          C++

          class Solution {
          public:
              int guessNumber(int n) {
                  int left = 1, right = n;
                  while (left < right) { // 循環直至區間左右端點相同
                      int mid = left + (right - left) / 2; // 防止計算時溢出
                      if (guess(mid) <= 0) {
                          right = mid; // 答案在區間 [left, mid] 中
                      } else {
                          left = mid + 1; // 答案在區間 [mid+1, right] 中
                      }
                  }
                  // 此時有 left == right,區間縮為一個點,即為答案
                  return left;
              }
          };

          Java

          public class Solution extends GuessGame {
              public int guessNumber(int n) {
                  int left = 1, right = n;
                  while (left < right) { // 循環直至區間左右端點相同
                      int mid = left + (right - left) / 2; // 防止計算時溢出
                      if (guess(mid) <= 0) {
                          right = mid; // 答案在區間 [left, mid] 中
                      } else {
                          left = mid + 1; // 答案在區間 [mid+1, right] 中
                      }
                  }
                  // 此時有 left == right,區間縮為一個點,即為答案
                  return left;
              }
          }
          

          C#

          public class Solution : GuessGame {
              public int GuessNumber(int n) {
                  int left = 1, right = n;
                  while (left < right) { // 循環直至區間左右端點相同
                      int mid = left + (right - left) / 2; // 防止計算時溢出
                      if (guess(mid) <= 0) {
                          right = mid; // 答案在區間 [left, mid] 中
                      } else {
                          left = mid + 1; // 答案在區間 [mid+1, right] 中
                      }
                  }
                  // 此時有 left == right,區間縮為一個點,即為答案
                  return left;
              }
          }

          Golang

          func guessNumber(n int) int {
              return sort.Search(n, func(x int) bool { return guess(x) <= 0 })
          }

          JavaScript

          var guessNumber = function(n) {
              let left = 1, right = n;
              while (left < right) { // 循環直至區間左右端點相同
                  const mid = Math.floor(left + (right - left) / 2); 
                  if (guess(mid) <= 0) {
                      right = mid; // 答案在區間 [left, mid] 中
                  } else {
                      left = mid + 1; // 答案在區間 [mid+1, right] 中
                  }
              }
              // 此時有 left == right,區間縮為一個點,即為答案
              return left;
          };

          C

          int guessNumber(int n) {
              int left = 1, right = n;
              while (left < right) {  // 循環直至區間左右端點相同
                  int mid = left + (right - left) / 2;  // 防止計算時溢出
                  if (guess(mid) <= 0) {
                      right = mid;  // 答案在區間 [left, mid] 中
                  } else {
                      left = mid + 1;  // 答案在區間 [mid+1, right] 中
                  }
              }
              // 此時有 left == right,區間縮為一個點,即為答案
              return left;
          }

          Python3

          class Solution:
              def guessNumber(self, n: int) -> int:
                  left, right = 1, n
                  while left < right:
                      mid = (left + right) // 2
                      if guess(mid) <= 0:
                          right = mid   # 答案在區間 [left, mid] 中
                      else:
                          left = mid + 1   # 答案在區間 [mid+1, right] 中
                  
                  # 此時有 left == right,區間縮為一個點,即為答案
                  return left


          復雜度分析

          • 時間復雜度:O(logn)。時間復雜度即為二分的次數,每次二分我們將區間的長度減小一半,直至區間長度為 1 時二分終止,而區間初始長度為 n,因此二分次數為 O(logn)。
          • 空間復雜度:O(1) 。


          BY /

          本文作者:力扣

          聲明:本文歸“力扣”版權所有,如需轉載請聯系。

          avaScript

          BOM:瀏覽器對象模型

          一套操作瀏覽器功能的API

          通過BOM可以操作瀏覽器窗口,比如彈出框、控制瀏覽器跳轉、獲取分辨率等

          DOM:文檔對象模型

          一套操作頁面元素的API

          DOM可以把HTML看到是文檔樹,通過DOM提供的API可以對樹上的節點進行操作

          接受用戶的輸入

          prompt:類似python當中的input;

          多行注釋

          /*

          這是多行注釋

          這是多行注釋

          /*

          變量賦值

          var num1; // 聲明變量

          var num1 = 1; // 聲明變量并賦值

          var num1, num2, num3; // 同時聲明多個變量

          數字

          判斷一個變量是不是一個數字;

          var cce='1';

          console.log(isNaN(cce));

          // false isNaN的意思就是不是一個數字,那么現在我們給的一個數字就會返回一個false

          轉移符

          字面量含義\n換行\t制表\b空格\r回車\斜杠

          獲取字符串的長度

          string.length:獲取string字符串的長度;

          var str = '蔡長恩';

          console.log(str.length);

          // 3

          數據類型

          獲取變量的類型

          typeof(data):獲取變量的類型;

          var str = '蔡長恩';

          console.log(typeof(str));

          // string

          數字類型轉換

          toString:轉換為string類型;

          String():直接轉為字符串類型;

          parseInt:直接轉為數字類型;

          parseFloat:直接轉為浮點類型;

          var num=1;

          console.log(typeof String(num)) // 數字轉字符串

          // string

          console.log(typeof num.toString()) // 數字轉字符串

          // string

          var num='1';

          console.log(typeof parseInt(num))

          // number

          bool類型轉換

          Boolean():轉為bool類型;

          注意:結果為false有幾種情況 null undefined '' 0 NaN


          主站蜘蛛池模板: 国产成人精品一区二区三区无码| 日本中文字幕一区二区有码在线| 无码喷水一区二区浪潮AV| 无码一区18禁3D| 亚洲色欲一区二区三区在线观看| tom影院亚洲国产一区二区 | 久久影院亚洲一区| 欧美av色香蕉一区二区蜜桃小说| 蜜臀Av午夜一区二区三区| 日本亚洲国产一区二区三区| 国模吧无码一区二区三区| 中文字幕日韩人妻不卡一区| 中文字幕精品一区| 久久国产高清一区二区三区| 人妻无码一区二区三区四区| 亚洲国产一区二区三区| 国产一区二区高清在线播放| 一区二区三区伦理高清| 亚洲视频一区二区| 国产成人精品无人区一区 | 一区二区三区在线观看中文字幕 | 女女同性一区二区三区四区| 亚洲国产精品无码第一区二区三区 | 97久久精品无码一区二区天美| 日韩人妻无码一区二区三区久久 | 亚洲综合无码一区二区痴汉 | 视频一区视频二区制服丝袜| 视频在线一区二区三区| 国产成人无码一区二区在线观看 | 一区二区三区视频在线播放| 综合久久一区二区三区 | 国产剧情国产精品一区| 成人中文字幕一区二区三区| 国产Av一区二区精品久久| 一区二区三区在线| 中文字幕一区二区人妻性色| 亚洲精品色播一区二区| 鲁丝丝国产一区二区| 久久久人妻精品无码一区| 一区二区三区四区视频| 国产在线观看91精品一区|