PHP負數值得問題,PHP取餘數 怎麼取出來是負數

2022-10-25 01:56:31 字數 3713 閱讀 9332

1樓:

在計算機中,負數以其正值的補碼形式表達。

什麼叫補碼呢?這得從原碼,反碼說起。

原碼:一個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。

比如 00000000 00000000 00000000 00000101 是 5的 原碼。

反碼:將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。

反碼是相互的,所以也可稱:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。

補碼:反碼加1稱為補碼。

也就是說,要得到一個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。

比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。

那麼,補碼為:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011

2樓:匿名使用者

負數是其正值的補碼。

00000101 5 =》補碼 11111011 方法是 按位取反末位加1

php取餘數 怎麼取出來是負數

3樓:匿名使用者

比如:$a = 10;

$b = 3;

echo $a%$b; //輸出bai

du1$a = -10;

$b = 3;

echo $a%$b; //輸出-1

所以,輸出負數zhi,跟$a變數的值dao有關。為了避免輸出負數,可以abs()處理一下。

$a = -10;

$b = 3;

echo abs($a%$b); //輸出1

4樓:匿名使用者

這個的確是php的bug,參考文章內容如下:62616964757a686964616fe58685e5aeb931333332613030

我們先來看個例子.

$res = 16244799483;

echo $res%9999999;

// 輸出結果為 -5069794, 正確的結果應該是4801107其實這也算上php一個bug吧.最主要是php是個弱型別語言.他內建了機器來判斷使用者的型別.

但是機器畢竟是機器.也有判斷出錯的時候.就像上面.所以這時候我們就需要人工干預下.

所以我就想到要用下面的方法來解決php整數取餘返回負數的問題.

$res = floatval(16244799483);

var_dump($res % 9999999);

我們看到結果還是錯誤的-5069794.

但是值得注意的是返回是一個int型別的.

詳細思考了一下.php整數取餘返回負數的問題是這樣處理的.

php取餘預設為整數的.

而且當你定義$res = 16244799483;

其實就已經溢位了.所以要加上強制型別轉換.變成float型別.

但是這樣還不夠.因為%這個取模計算還是針對整數的.

所以我們需要一個函式fmod.是針對float型別的.

所以最終php整數取餘返回負數的解決辦法為:

$res = floatval(16244799483);

var_dump(fmod($res,9999999));

這樣我們就解決了php整數取餘返回負數這個問題.

大體明白了吧,其實一般不會出現使用php做大量科學計算的~~

5樓:匿名使用者

echo abs(52319434%...)

abs取絕對值: )

php 陣列下標負數的問題

6樓:

這是因為win下是32bit的環境,linux用的是64位環境。

-2在32bit下的資料為0xffff fffe-2在64bit下的資料為0xffff ffff ffff fffe而你那未經考慮就直接在64bit下可會導致得到0x0000 0000 ffff fffe得值4294967294

解決辦法:根據-2的「產生演算法」或「資料**」作出修改或應對比如加入

if(php_int_size===4)else

7樓:無業遊民上學校

看看exec返換給os的值是多少。

在linux下,這個返回值也許是無符號型別,返回的是一個正數,所以傳給php也是正數了,php實際上也是呼叫的exec所返回的值。

8樓:飛揚舞俠

用linux測試也是左邊的結果

9樓:匿名使用者

我是不知道你是怎麼測試的,我在windows環境下輸出的仍然是右邊的結果,只能說明使用var_export函式之後只會輸出這樣的結果

php 如何將數字 負號去除

10樓:匿名使用者

給你個示例吧

$num = -10222.00;

if (strripos($num, "-") < 0) else

11樓:

//判斷如果是負數,就用abs()函式取其絕對值。

<?php

$num = $_post['num'];//獲取資料if($num<0)else

?>

12樓:匿名使用者

<?php

$num = $_post['num'];//獲取資料if($num<0)

else

13樓:天使

str_replace("-", "", $num);

14樓:曉範兒

使用 abs(number)

php中如何將輸出變數值為正數

15樓:宇宙大師之一

php 中 abs() 函式可以實現

abs() 函式返回一個數的絕對值。

abs(x)

引數說明

x 必需

返回引數 x 的絕對值。如果引數 x 是 float,則返回的型別也是 float,否則返回 integer(因為 float 通常比 integer 有更大的取值範圍)。

例如:<?php

echo(abs(6.7));

echo(abs(-3));

echo(abs(3));

?>

輸出:6.733

16樓:匿名使用者

使用abs()函式

echo (abs($a));這樣子就行

php查詢ip問題

想實現查詢ip可以看我的這個回答 http zhidao.baidu.com question 97006048.html 沒辦法,除非你是黑客,能進入他的系統,將他的程式給改了。 除非你不用她的東西 泡泡糖辦公 header content type text html charset gb231...

php過濾函式問題

php 的函式 strip tags 沒搞錯吧,竟然用這麼原始方法,樓主可以把要過濾的東東都放在一個陣列裡,迴圈替換下就可以了 str preg replace select select str str preg replace update update str str preg replace...

陣列轉換問題php

hi我幫你解決 高階副會長 副會長常務理事 理事會員 協會領導 第二收件人 arq implode post type echo str replace arq 你看看效果。第一個陣列,我覺得有問題.select的where id arr 我覺得最好用id in 來做。先把陣列轉換成字串。a imp...