不同資料型別混合運算及型別轉換

2021-10-06 11:39:19 字數 1358 閱讀 2679

結果如下:

wll@wll-linux:~/code/test$ ./cal

a > b

unsigned short a = 0;

unsigned int b = 0x12345678;

a = b;

printf("b:0x%x, a:0x%x\r\n", b, a);

結果如下:

wll@wll-linux:~/code/test$ ./cal

b:0x12345678, a:0x5678

unsigned char test(unsigned short x)

unsigned short a = 0;

unsigned int b = 0x12345678;

printf("a:0x%x\r\n", a=test(b));

結果如下:

wll@wll-linux:~/code/test$ ./cal

x: 0x5678

a: 0x78

由於不熟悉不同型別間運算規則,導致的**bug,大部分人應該都遇到過,舉例如下:

unsigned int a = 1;

unsigned int b = 100;

for ( b; b-a >= 0; b--)

以上**並不會按照預期執行,而是出現了死迴圈:

無符號數想減,結果永遠是無符號數,而無符號數,是不會<0的,所以for迴圈不會通知。

保持語義不變的情況下可以改為如下:

for ( b; b >= a; b--)

另外,函式引數傳遞過程中的型別不一致導致的問題,也是層出不窮,待筆者日後遇到再進行補充

不同資料型別轉換

nsstring 相關 nsdictionary 轉nsstring 用字串將nsarray的元素拼接起來 nsarray array nsarray arraywithobjects hello world nil nsstring string array componentsjoinedbys...

混合運算的型別轉換

1616 3 張宇 16 10 17 連續十六天總結 a.混合運算的型別轉換 100 b.這節學的內容和以前學的有很多是重複的,比如雙精度的和單精度的數相運算的結果是雙精度。我們也可以將結果強行進行型別轉換,資料型別 表示式 或 資料型別 表示式 運算時會進行隱性運算,有符號向無符號的轉化。精度低的...

資料型別及轉換

原始值 number string boolean null undefined 引用值 object array object function date regexp 正規表示式 原始值和引用值區別 原始型別變數,存放的是具體的值,即修改變數a的值,不會影響變數b的值。var a 5 var b...