問題: abs(int_min) 為負數?
思路:首先要明確int的取值範圍
在c++中包含在
#include中,由巨集變數int_max和int_min表示;
其次明確int,long int,以及long long int的位元組長度,
可以用sizeof(type)查出;
由於long int是為了相容32位,所以在32位機上是32bit,在64位機上市64位;
明白這幾個點之後,重點理解abs函式
我們考慮乙個極端的例子,
num = int_min;
則abs(num) 等於多少呢?
首先需要理解abs的函式引數和返回值;
在c庫中,包含#include和#include,可以知道 int abs(int n)。
可知道返回值為int,則 abs(num) = num,仍是負數;
對於溢位的整數,仍然無法解決,需要用
long int labs(long int n) for long int
long long int llabs(long long int n) for long long int
在c++中,利用函式過載,進行了統一介面,統一呼叫abs即可;需要包含標頭檔案#include
int abs (int n);
long int abs (long int n);
long long int abs (long long int n);
這樣可以根據引數型別來呼叫具體的函式,而不需要自己來選擇具體呼叫哪個函式;
設計到整數溢位的例子,首先將整數轉為長整數,然後所有的結果都用長整數表示,這樣可以保證不溢位;其次要保證標頭檔案包含cmath,保證呼叫的是c++標頭檔案中的abs
數字轉字串
c中函式,sprintf(char *str,const char * format, …)
存在的問題,無法控制str的大小,屬於un-safe函式,可能記憶體溢位;另外需要需要正確,d為int,ld為long int,lld為long long int,否則會出現數值溢位的情況;
如sprintf(str,"%d",int_max+1)
snprintf(char *str,int n ,const char * format,..) 相對安全
c++ 提供的格式轉換#include ,借助中間字元流stringstream來實現格式轉換;
template
output_type convert(input_type number) {
stringstream ss;
ssss>>result;
return result;
string ss = convert(5.5);
unsigned char 數值溢位問題
include int main void 在vc 中的輸出結果是 0256 press any key to continue 這說明了 語句 unsigned char 申請的空間 所能儲存的數字的範圍 也就是unsigned char型別所能表示的數的範圍 是 0 255 十進位制 一共 25...
Python中數值和進製轉換
python數值和進製轉換 1.1 python中數值型別 int 整型 123 long 長整型 2147483648l float 浮點型 3.14 不同的數值型別會自動擴充 int數值大於或等於2 31次方,會自動轉換成long 表示方式是在數值後面加上l 如果int或long和float一起...
JavaScript中轉換為數值型別問題
如果是boolean值,true和false類將分別被轉換成1 和 0 如果是數字值,只是簡單地傳入和返回 如果是null值,返回0 如果是undefined,返回nan 如果是字串遵循以下規則 如果字串中只包含數字 包括前面帶正號或負號的情況 則將其轉換為十進位制數值 即 1 會變成 1 123 ...