PHPfmod
① c++和程序員的是慢慢淘汰嗎
編程語言在某種程度上很像朝代,隨著時間流逝而一代代更迭,有些編程語言正面臨著淘汰,消亡在歷史的洪流中。
在互聯網上,關於C++將要被市場所淘汰的討論從未停止過,有人說C++是一門過時的編程語言,也有人說,C++是不可替代的。那麼,C++過時了嗎?C++程序員會不會被淘汰?
100offer的觀點是:企業對C++的需求勢必越來越少,C++程序員全體競爭力也將越來越弱,但C++在很長一段時間都不會徹底消亡。
讓我們先來看一組TIOBE的最新數據。
編程語言排行榜 TOP18 榜單
以上是TIOBE於2016年8月發布的「編程語言排行榜 TOP 18榜單」,根據最新排名,java再度奪得排行榜冠軍,有19.010%用戶,對應了之前的觀點——從市場上的招聘現狀看,Java工程師依然有著其他語言不可取代的競爭優勢。
C和C++雖然分別拿到了亞軍與季軍,但是均再次跌破歷史最低點,C較上個月下降3.43%,C++較上個月下降1.94%,情況不容樂觀。
前 10 名編程語言長期走勢圖
從TIOBE在8月發布的「前 10 名編程語言長期走勢圖」能夠看出來,C++在21世紀初有著不可動搖的地位,從2004年之後,C++的佔比開始不斷下跌,對比排在後面的編程語言不再具備優勢。
我們也選擇了五門編程語言,從企業發出面邀數和最終入職數做出對比分析——
從企業發給候選人的總面邀佔比以及程序員最終入職佔比可以看出,java仍是市場上最供不應求的崗位,php緊隨其後,C++獲得的面邀數和offer數沒有任何優勢。
曾經是編程語言「三巨頭」之一的C++,為何現如今會面臨如此尷尬的局面?
C++不斷衰退的原因
1、技術不斷更新
以前,絕大數需求都要用C++來寫,所以C++曾無比興盛。如今,很多領域都開始有專屬它的一門語言,使得實現需求變得更為便捷。
眾所周知,在20世紀末21世紀初,大部分的個人計算機只有文字排版、圖像製作的需求,隨著個人計算機的迅速普及,用戶基數不斷增加,這類需求迅速降低,新增用戶們的需求開始轉變為信息整合共享。
隨著互聯網的發展,技術不斷更新,用戶只需簡單的「傻瓜式」操作就能滿足他們的需求,候選人柯先生舉了在app里加地圖的例子——
「以 前,這類需求沒那麼容易,要用到 OS 的 UI 功能去集成一個 native 模塊才能實現,現在簡單多了,用 Google Maps 做網頁的 marshup 就行了。C++在面臨新技術時,太多功能有局限性,未免顯得復雜了,例如,C++的靜態類型限制太強導致動態功能不足。」
2、C++已過巔峰期
雖然C++仍在不斷更新,但使用C++的員工平均年齡不斷增長,能使用C++新項目也越來越少,導致C++已過巔峰期。
候選人張先生提出,「C++的語言機制在實際使用有很多問題,導致細節不能運用。舉個典型問題,如STL,容易生成錯誤信息,而Java則不會出現這類問題。所以,很讓人沮喪,C++早已過了巔峰期。」
此次接受100offer采訪的C++程序員們,有70%表示:在初學時,耗費了太多太多精力投入到語言細節中去了。他們如今在思考:這些細節對除C++以外的應用開發到底有沒有作用?或者說,作用只是微乎其微?
C++還有很強的生命力,只是顛峰早已不在,並且,強大生命力僅是從歷史上的興盛繼承而來。無法掩飾的事實是:C++在應用領域開始展現出疲態。
3、市場需求減少
C++不斷衰退的最重要原因是:市場需求減少。
從文章開頭提供的相關數據可知:需要C++的企業越來越少,這是不爭的事實。
編程語言的盛衰與市場需求的關系更為明顯,並非是編程語言本身的優劣所影響市場需求。我們不得不承認的現實是:會大規模自建基礎設施的企業,除了BAT等巨頭企業外並不多,時代早已悄然發生改變。
即便是新興的互聯網巨頭企業們,留給基礎設施工程師的職位也不會很多,更別提創業公司了。顯然易見,C++更偏向於基礎設施方向,隨著業務系統開發的門檻持續性降低,C++職位需求勢必將越來越低。
當C++只剩下大型企業才有大量需求時,當C++對員工要求也越來越苛刻時,當C++程序員的個人發展變得更為艱難時,這門語言自然不可避免會走向衰退。
C++為什麼不會消亡
即便C++的市場需求越來越少,但C++是不會消亡的。從世界范圍的統計數據來看,C++雖然在不斷衰退,但仍多年排在第三名。所以,在很長一段時間,C++都不會跌出前三的寶座。
C++為什麼不會消亡?我們采訪了多名C++程序員後,得出以下三個觀點——
1、在游戲和工具領域仍然是主流
首先是游戲領域,Milo Yip表示——
程序員必須使用C++框架/庫,如大部分游戲引擎(如Unreal/Source)及中間件(如Havok/FMOD),雖然有些C++庫提供其他語言的綁定,但通常原生的API性能最好、最新。
其次是工具領域,無論是網路安全還是殺毒軟體,C++仍是主流語言。
2、C++程序員的收入沒有受到影響
根據100offer的後台數據顯示,目前入職的程序員年薪最高達47萬,最低22.4萬,C++程序員的收入與其它編程語言的崗位相比處於持平狀態,沒有出現劣勢。
隨著C++逐漸成為某些特定企業和特定項目所需的語言後,高級C++程序員的收入也會更具有競爭性。
3、C++仍具有不可替代性
知乎紅人vczh說:「我在上大學的時候幾乎就只學習C++,後來實習的時候去了微軟,結果到了那裡才知道,那個組是不用C++的,怎麼辦?憑借著C++帶給我的殷實的功底,我按時完成了老闆給我的「兩個星期內學會C#和WCF基礎知識」的工作,順利開始工作。」
當然,這只是vczh的個人經歷,不具有普遍性,但不可否認的是C++仍具有不可替代性。某家創業公司CTO在接受采訪時表示:「即便有很多人唱衰C++,但在當代,仍有很多很多項目的目標平台暫時只提供C++編譯器的支持,僅從這一點而言,C++是不可能徹底死亡的。」
從應用領域來說,C++適用於高性能計算、嵌入式系統、開發伺服器軟體、游戲、實時系統等,所以,短期內能徹底取代C++語言並不存在。
C++在系統、圖形、網路等很多領域都是不可替代的,它的光輝歲月讓它的死亡速度得以削減。
結論:
當某一種編程語言在市場需求明顯比另一種語言更強時,強需求語言中的缺陷則容易被淡化,衰退的語言則不斷被人挑出致命硬傷。這種編程語言之間的比較並不公平,且沒有意義。
編程語言都是用來表達思想和完成需求的工具,隨著時代的發展,不同語言在不同領域都做出了取捨,取代雖然存在,但不是必然現象。C++的需求隨著時代發展會不可避免地越來越少,但不可能徹底消失,C++程序員也具有不可替代性,在市場上依舊有著競爭性。不懂關注他bossoz,希望能幫助到您。
② PHP取余函數介紹MOD(x,y)與x%y
取余函數
PHP取余函數
PHP兩個取余
MOD(x,y)
x%y
MOD
例如:9/3,9是被除數,3為除數.mod函數是一個求余函數,其格式為:
mod(nExp1,nExp2),即是兩個數值表達式作除法運算後的余數。那麼:兩個同號整數求余與你所知的兩個正數求余完全一樣(即兩個負整數與兩個正整數的演算法一樣)。
一、兩個異號整數求余
1.函數值符號規律(余數的符號)
mod(負,正)=正
mod(正,負)=負
結論:兩個整數求余時,其值的符號為除數的符號。
2.取值規律
先將兩個整數看作是正數,再作除法運算
①能整除時,其值為0
②不能整除時,其值=除數×(整商+1)-被除數
例:mod(9,-8)=-7
即:9除以8的整數商為1,加1後為2;其與除數之積為18;再與被數之差為7;取除數的符號。所以值為-7。
二、兩個小數求余
取值規律:被除數-(整商×除數)之後在第一位小數位進行四捨五入。
例:mod(9,1.2)=1
即:9除1.2其整商為7;7與除數1.2之積為8.4;8.4四捨五入之後為8;被除數9與8之差為1。故結果為1。
例:mod(9,2.4)=0
即:9除2.2其整商為4;4與除數2.2這積為8.8;8.8四捨五入之後為9;被除數9與9之差為0。故結果為0。
OK,就這些不知能否滿足您的需要?
%
復制代碼
代碼如下:
<?php
echo
15%4;
//結果是
3
說說php取余運算(%)的那點事
今天我是看到網路知道中這個例子:http://..com/question/41130500.html
,才想研究下php取余的!
復制代碼
代碼如下:
<?php
$val=9.45;
$result=$val*100;
echo
$result%100;
//44
?>
提問者奇怪,為什麼上面輸出的記過是44
而不是想像中的45
,如果你這樣:
echo
945%100
//45
那麼結果應該是45的,這是因為php默認對變數進行取整進行取余運算的。
關於php浮點數,情況laruence博客文章:http://www.laruence.com/2013/03/26/2884.html
然後看看下面的php代碼:
復制代碼
代碼如下:
<?php
/*
*
name:
mckee
*
blog:
http://www.phpddt.com
*/
$val=9.45;
$result=$val*100;
echo
intval($result);
//這里輸出944
echo
$result%100;
//這里輸出44
echo
fmod(floatval($result),100);
//這里輸出45
?>
對於大整數,php會出現溢出,可能返回負數情況(這是因為php默認使用整數取余的,所以你要把它轉換成float類型(如上))可以這樣做:
復制代碼
代碼如下:
function
Kmod($bn,
$sn)
{
return
intval(fmod(floatval($bn),
$sn));
}
③ PHP取余數 怎麼取出來是負數
這個的確是PHP的BUG,參考文章內容如下:
我們先來看個例子.
$res = 16244799483;
echo $res%9999999;
// 輸出結果為 -5069794, 正確的結果應該是4801107
其實這也算上PHP一個BUG吧.最主要是PHP是個弱類型語言.他內置了機器來判斷用戶的類型.
但是機器畢竟是機器.也有判斷出錯的時候.就像上面.所以這時候我們就需要人工干預下.
所以我就想到要用下面的方法來解決PHP整數取余返回負數的問題.
$res = floatval(16244799483);
var_mp($res % 9999999);
我們看到結果還是錯誤的-5069794.
但是值得注意的是返回是一個int類型的.
詳細思考了一下.PHP整數取余返回負數的問題是這樣處理的.
PHP取余默認為整數的.
而且當你定義$res = 16244799483;
其實就已經溢出了.所以要加上強制類型轉換.變成float類型.
但是這樣還不夠.因為%這個取模計算還是針對整數的.
所以我們需要一個函數fmod.是針對float類型的.
所以最終PHP整數取余返回負數的解決辦法為:
$res = floatval(16244799483);
var_mp(fmod($res,9999999));
這樣我們就解決了PHP整數取余返回負數這個問題.
大體明白了吧,其實一般不會出現使用PHP做大量科學計算的~~
④ excel論壇之家如何注冊賬號
1、http://club.excelhome.net/member.php?mod=join
excel論壇的注冊地址,按裡面內容認真填寫。
2、可以點擊用QQ帳號登陸。
https://graph.qq.com/oauth/show?which=Login&display=pc&response_type=code&client_id=10051063&redirect_uri=http%3A%2F%2Fclub.excelhome.net%2Fconnect.php%3Fmod%3Dlogin%26op%3Dcallback%26referer%3Dhttp%253A%252F%252Fclub.excelhome.net%252Fforum.php&state=&scope=get_user_info%2Cadd_share%2Cadd_t%2Cadd_pic_t%2Cget_repost_list
用QQ帳號登陸。
3、用微信登陸
https://api.weibo.com/oauth2/authorize?client_id=1487595692&redirect_uri=http%3A%2F%2Fclub.excelhome.net%2Fplugin.php%3Fid%3Dsina_login%3Aindex%26operation%3Dcallback&response_type=code&state=JWq31I___http%253A%252F%252Fclub.excelhome.net%252Fmember.php%253Fmod%253Djoin
⑤ PHP的常用系統函數有哪些
PHP自帶了大量的系統函數,使用這些函數可以完成大部分的任務。常用的有數學運算函數和日期時間函數。
1.數學運算函數:
數學運算是程序中最常執行的功能之一,PHP提供了很多系統函數實現運算功能,無須安裝、編譯和配置便可以直接使用。下表列出了常用的數學函數:
函數名稱
功能描述
函數名稱
功能描述
abs()
絕對值
is_finite()
判斷是否為有限值
acos()
反餘弦
is_infinite()
判斷是否為無限值
acosh()
反雙曲餘弦
is_nan()
判斷是否為合法數值
asin()
反正弦
lcg_value()
組合線性同餘發生器
asinh()
反雙曲正弦
log10()
以10為底的對數
atan2()
兩個參數的反正切
log()
自然對數
atan()
反正切
max()
最大值
atanh()
反雙曲正切
min()
最小值
base_convert()
在任意進制之間轉換數字
mt_getrandmax()
顯示隨機數的最大可能值
bindec()
二進制轉換為十進制
mt_rand()
生成更好的隨機數
ceil()
進一法取整
mt_sran()
播下一個更好隨機數種子
cos()
餘弦
octdec()
八進制轉換為十進制
cosh()
雙曲餘弦
pi()
圓周率
decbin()
十進制轉換為二進制
pow()
指數表達式
dechex()
十進制轉換為十六進制
rad2deg()
將弧度轉換為相應的角度值
decoct()
十進制轉換為八進制
rand()
產生一個隨機數
deg2rad()
將角度轉換為弧度
round()
對浮點數四捨五入
exp()
計算e的指數
sin()
正弦
floor()
捨去法取整
sinh()
雙曲正弦
fmod()
返回除法的浮點數余數
sqrt()
平方根
getrandmax()
顯示隨機數最大的可能值
srand()
播下隨機數發生器種子
hexdec()
十六進制轉換為十進制
tan()
正切
hypot()
計算直角三角形的斜邊長度
tanh()
雙曲正切
注意:這些數學函數僅能處理計算機中integer和float范圍的值。
示例:產生隨機密碼的的函數
function CreatePassword($length=6) //生成密碼函數,默認6位
{
$dictionary=」」; //密碼字典
$maxChar=strlen($dictionary); //獲取字典長度
$password=」」;
for($i=0; $i<$length; $i++) //隨機生成每一位
{
$password.=$dictionary[rand(0, $maxChar)]; //產生隨機數,再從字典取字母
}
return $password;
}
2.日期和時間運算:
PHP提供了豐富的日期和時間方面運算的函數。
1)UNIX時間戳:
時間戳(Timestamp)是源於UNIX系統的時間表示方法,是指從1970年1月1日(00:00:00GMT)起到現在所經過的秒數,因此也稱為UNIX時間戳。
在PHP中使用時間戳的最簡單方式就是調用time()函數,time()函數可以根據當前時間返回一個時間戳的表示法。示例:
echo 「當前時間戳為:」.time();
2)日期函數:
PHP提供的一些常用的日期函數。
①date()函數:
date()函數用於格式化一個本地日期和時間。語法格式為:
string date(string $format [, int $timestamp])
返回將整數$timestamp按照$format給定格式而產生的字元串。其中,$timestamp參數是可選的,如果沒有給出時間戳,則使用本地當前時間,即time()。
下表列出了$format格式化字元串參數的說明:
值
說明
返回值
D
月份中的第幾天,有前導零的2位數字
01到31
D
星期中的第幾天,文本表示,3個字母
Mon到Sun
J
月份中的第幾天,沒有前導零
1到31
L
L的小寫字母,表示星期幾的完整文本格式
Sunday到Saturday
N
數字表示的星期中的第幾天
1(表示星期一)到7(表示星期天)
S
每月天數後面的英文後綴,2個字元
st,nd,rd或th。可以和j一起用
W
星期中的第幾天,數字表示
0(表示星期天)到6(表示星期六)
Z
年份中的第幾天
0到366
W
年份中的第幾周,每周從星期一開始
例如:42(當年的第42周)
F
月份,完整的文本格式,例如January
January到December
M
數字表示的月份,有前導零
01到12
M
3個字母縮寫表示的月份
Jan到Dec
N
數字表示的月份,沒有前導零
1到12
t
給定月份所應有的天數
28到31
L
是否為閏年
如果是閏年為1,否則為0
o
年份數字
例如:2016
Y
4位數字完整表示的年份
例如:2016
y
2位數字表示的年份
例如:16
a
小寫的上午和下午值
am或pm
A
大寫的上午和下午值
AM或PM
g
小時,12小時格式,沒有前導零
1到12
G
小時,24小時格式,沒有前導零
0到23
h
小時,12小時格式,有前導零
01到12
H
小時,24小時格式,有前導零
00到23
i
有前導零的分鍾數
00到59
s
秒數,有前導零
00到59
e
時區標識
例如:UTC,GMT,Atlantic/Azores
I
是否為夏令時
如果是夏令時為1,否則為0
O
與格林威治時間相差的小時數
例如:+0200
Z
時差偏移量的秒數
-43200到43200
c
ISO8601格式的日期
2011-05-12T15:19:21+00:00
r
RFC822格式的日期
例如:Thu, 21 Dec 2011 06:07:08 +0200
U
從January 1 1970 00:00:00開始至今的秒數
與time()函數相同
示例:
$today=date(「m/d/y」); //結果為:07/19/12
$today=date(「F j, Y, g:i a」); //結果為:July 19, 2012, 9:07 am
$today=date(「Y年n月j日」); //結果為:2012年7月19日
$today=date(「Y-m-d H:i:s」); //結果為:2012-07-19 09:07:32
$today=date(「D M j G:i:s T Y」); //結果為:Thu Jul 19 9:07:32 CST 2012
$today=date(『i t i s t h e jS d a y』); //結果為:07 31 07 32 31 09 Asia/Shanghai 19th 19 am 12
$today=date(『\i\t \i\s \t\h\e jS \d\a\y』); //結果為:it is the 19th day
$today=date(『H:m:s \m \i\s\ \m\o \h』); //結果為:09:07:32 m is month
②gmdate()函數:
gmdate()函數實現與date()函數相同的功能,不同的是gmdate()函數返回的時間是格林威治標准時間(GMT)。語法格式為:
string gmdate(string $format [, int $timestamp])
③getdate()函數:
getdate()函數用於獲取指定的日期和時間信息。語法格式為:
array getdate([int $timestamp])
如果沒有指定時間戳$timestamp,則使用系統當前的本地時間。getdate()函數返回一個數組,數組中的每個元素代表日期和時間中的特定組成部分。下表列出了返回數組中鍵名的說明:
鍵名
說明
返回值例子
seconds
秒的數字表示
0到59
minutes
分鍾的數字表示
0到59
hours
小時的數字表示
0到23
mday
月份中的第幾天的數字表示
1到31
wday
星期中的第幾天的數字表示
0(表示星期天)到6(表示星期六)
mon
月份的數字表示
1到12
year
4位數字表示的完整年份
例如:2016
yday
一年中的第幾天的數字表示
0到365
weekday
星期幾的完整文本表示
Sunday到Saturday
month
月份的完整的文本表示
January到December
0
自從UNIX紀元開始至今的秒數
和time()的返回值類似,是一個時間戳
示例:
<?php
$today=getdate();
print_r($today);
printf(「今天是%s年%s月%s日 星期%s \n」, $today[「year」], $today[「mon」], $today[「mday」], $today[「wday」]);
printf(「現在時間是%s時%s分%s秒」, $today[「hours」], $today[「minutes」], $today[「seconds」]);
?>
執行後的結果為:
Arrar
(
[seconds]=>15
[minutes]=>37
[hours]=>9
[mday]=>19
[wday]=>4
[mon]=>7
[year]=>2016
[yday]=>200
[weekday]=>Thursday
[month]=>July
[0]=>1342661835
)
今天是2016年7月19日 星期4
現在時間是 9時37分15秒
④checkdate()函數:
checkdate()函數用於檢查一個日期是否有效,有效則返回true,否則返回false。語法格式為:
bool checkdate(int $month, int $day, int $year)
當滿足如下條件時,checkdate()函數將認為是一個有效的日期:
·$year的值是從1到32767
·$month的值是從1到12
·$day的值在給定的$month所應該具有的天數范圍之內,包括閏年情況
示例:
echo checkdate(2,29,2012)?」有效」:」無效」;
2)時間函數:
①time()函數:
time()函數使用方法非常簡單,沒有參數調用後返回當前日期和時間的UNIX時間戳。語法格式為:
int time(void)
示例:
$next50day=time()+(50*24*60*60); //計算50天以後的日期
②mktime()函數:
mktime()函數的作用與time()函數相同,都可以返回一個時間戳表示的時間。不同的是,在mktime()函數中可以指定具體的日期和時間。語法格式為:
int mktime([int $hour],[int $minute],[int $second],[int $month], [int $day],[int $year])
上述參數列表從右向左順序省略,任何省略的參數會被設置為本地日期和時間的當前值。如果指定的時間無法表示,則返回false。mktime()函數在做日期計算和驗證方面很有用。示例:
$day1=mktime(0,0,0,12,25,2012);
$day2=mktime(0,0,0,10,1,2012);
$days=($day1-$day2)/(24*60*60); //根據時間戳計算出相差的天數
③strtotime()函數:
strtotime()函數用於將可閱讀的英文日期/時間字元串轉換成UNIX時間戳。語法格式:
int strtotime(string $time[, int $now])
其中,$time參數表示要被轉換的字元串,$now表示計算返回值的時間戳。如果沒有提供$now參數,將使用系統的當前時間。strtotime()函數成功時返回時間戳,否則返回false。
④microtime()函數:
microtime()函數調用後將返回當前UNIX時間戳和微秒數。語法格式為:
mixed microtime([bool $get_as_float])
這里的可選參數$get_as_float是一個布爾值,如果為true將返回一個浮點數。默認不帶參數時將以「msec sec」格式返回一個字元串,其中msec是微秒部分,sec是UNIX時間戳。