---恢復內容開始---
一、資料型別
在我的windows上檢視可以看到對資料型別長度的定義
#define shrt_min (-32768) // minimum (signed) short value
#define shrt_max 32767 // maximum (signed) short value
#define ushrt_max 0xffff // maximum unsigned short value
#define int_min (-2147483647 - 1) // minimum (signed) int value
#define int_max 2147483647 // maximum (signed) int value
#define uint_max 0xffffffff // maximum unsigned int value
#define long_min (-2147483647l - 1) // minimum (signed) long value
#define long_max 2147483647l // maximum (signed) long value
此外推薦根據位元位數選擇資料型別如uint16_t,無符號16位整數
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
網路位元組序轉本機位元組序:ntohl,ntohs
本機位元組序轉網路位元組序:htonl,htons
浮點數都有符號位,float整體精確表示位數有限,23位尾數表示7位十進位制數字,使用更精確的中間值如long double,最後存入double(精確16位),使用浮點數關注末尾誤差的累積。
二、資料型別隱式轉換規則
隱式轉換是在賦值右邊計算過程臨時改變對其二進位製碼解釋規則,不改變二進位製碼也不會根本性改變解釋規則,c語言預設規則為數值表示範圍小的資料轉換為大的。最後賦值結果資料長度和解釋方式決定於=左邊資料型別。
1、有符號數無符號數同時出現在乙個表示式,無符號轉換為有符號,即把負數的補碼解釋為無符號數,往往是很大的正數,這在邏輯表示式以及減法運算中易錯誤,除非與數值計算無關的,其他少用無符號數
2、都是有符號數直接擴,無符號同理
整形數的截斷與擴充套件
1、賦值時左小於右的資料長度,左邊只能擷取右邊的低位,解釋方式不變,故負數可能變成正數
2、正數相乘相加後溢位截斷保留低位,長度為左邊型別的
2、擴充套件後數值不變
三、型別轉換
基本轉換:char,short運算前被轉換int,float變double,做完基本轉換若運算子兩端資料型別仍不一致,編譯器做自動型別轉換
c語言沒有規定char一定是有符號的,故使用時一定寫名signed或unsigned,ascii字元最高位0
自動型別轉換:窄變寬(同類無符號變有符號);浮點數間大轉小丟失小數;浮點轉整數具體分析,反之ok
強制型別轉換也是臨時的
---恢復內容結束---
數值表示與計算
ruby中的數值是以數值物件的形式存在的。數值的輸出與字串輸出一樣,也是使用print方法和puts方法。如 puts 10執行結果 10 irb prompt irb命令後的選項 prompt會簡化irb的輸出結果 1 1 輸入1 1 2 計算後結果為2ruby也與其他程式語言一樣,乘法用 號 除...
鍊錶數值計算(C語言)
需要考慮到如下問題 1 由鍊錶儲存的數怎麼轉化為可以進行運算的數值 2 數值的儲存採用哪種資料型別,考慮運算過程中數值可能會超過定義的資料型別值的範圍,採用陣列形式儲存解決溢位問題 3 陣列形式的數值怎麼進行加法運算 4 數值結果如何轉化為可用鍊錶儲存的形式 include include defi...
C 中數值極限的表示
關於c 中的數值極限的表示 c 中的數值極限可以利用 class numeric limits 表示,常用方法如下 include include include using namespace std int main cout numeric limits max max max min max...