c语言unsigned char转换成unsigned short,有關c語言數據類型轉換之char,unsigned char,unsigned short...

這是一道朗訊的筆試題(我把一些相關資料匯總了一下,希望大家能進來廣泛的探討,不甚感激!)

#include

int main()

{

char  ca;

unsigned char ucb;

unsigned short usc;

ca = 128;

ucb =128;

usc = ca + ucb;

printf("%d\n", usc);

usc = ca + (short)ucb;

printf("%d\n", usc);

usc = (unsigned char)ca + ucb;

printf("%d\n", usc);

usc = ca + (char)ucb;

printf("%d\n", usc);

getchar();

return EXIT_SUCCESS;

}

結果是:0, 0, 256, 65280.

這道題最難得部分,莫過於你是否理解c語言中的數據類型轉換 。

有個名詞“Inerger Promotion"(整型提升):在算術類型中有這么一種轉換,有符號或無符號的char型,short型和Bit-field在做算術運算之前,首先要做整型提升,然后才能參與運算。(其它的一些類型之間的轉換,可以參考任何一本c語言書)

一下是一些關鍵性概念:

無論要做什么運算都要先看這個數存入內存是什么樣子的;

類型提升/截斷的時候都是對內存中數據的操作,提升的時候就是需要 進行擴位:對無符號數擴位的時候直接把擴出的位上補零即可(因為unsigned都是正數);有符號

數進行擴位,則進行符號位擴展(sign extension)如果是正數即原最高位是零則補零,如果是負數即原最高位是1則全補1;進行數據截斷的時候是從低位開始數位數然后截斷,這里注意我們使用的一般都是小端機(little Endian)-----------http://blog.csdn.net/gukesdo/article/details/6909766

以下是一些參考博客和例題:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值