找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3845|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教個(gè)C語(yǔ)言長(zhǎng)整型的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:47286 發(fā)表于 2018-10-2 12:51 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
unsigned long a;
unsigned char b=1;
unsigned char c;

a=b<<16;
c=a>>16;

return c;

這時(shí)候 c返回的是0 是哪里錯(cuò)了

左移和右移8位沒問(wèn)題 16和24都不行 哪位前輩辛苦一下給講講
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:89515 發(fā)表于 2018-10-2 16:17 | 只看該作者
類型不一致,強(qiáng)制轉(zhuǎn)換
回復(fù)

使用道具 舉報(bào)

板凳
ID:258566 發(fā)表于 2018-10-2 16:50 | 只看該作者
unsigned char 8位,0-255
??????左移16位,想干嘛?
回復(fù)

使用道具 舉報(bào)

地板
ID:387733 發(fā)表于 2018-10-2 17:24 | 只看該作者
b是8位的,左移16次,早就溢出變成0了,因此a=0,a右移16次自然還是0了。
b左移8次,1移入進(jìn)位標(biāo)志,一起賦給a,a=0x100,a右移16次后 a=0x01,所以 c=1

評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
yousunny + 10 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:404913 發(fā)表于 2018-10-2 18:45 | 只看該作者
長(zhǎng)整形的和字符形的轉(zhuǎn)換會(huì)很出問(wèn)題的
回復(fù)

使用道具 舉報(bào)

6#
ID:47286 發(fā)表于 2018-10-2 21:18 | 只看該作者
mengzhixinheng 發(fā)表于 2018-10-2 16:17
類型不一致,強(qiáng)制轉(zhuǎn)換

前輩 給講講怎么強(qiáng)制轉(zhuǎn)換 以前在書上看過(guò) 問(wèn)題是現(xiàn)在都想不起是哪本書了 慚愧
回復(fù)

使用道具 舉報(bào)

7#
ID:47286 發(fā)表于 2018-10-2 21:21 | 只看該作者
cccc888 發(fā)表于 2018-10-2 16:50
unsigned char 8位,0-255
??????左移16位,想干嘛?

我想寫個(gè)定時(shí)程序 比較當(dāng)前時(shí)間和設(shè)置時(shí)間時(shí)遇到跨年的問(wèn)題 比如起始月是11月 結(jié)束月是明年1月 就不能直接對(duì)比當(dāng)前日期>起始日期且<結(jié)束日期 所以想用移位的方法 把年月日時(shí)放入一個(gè)變量里 一個(gè)long是4個(gè)8位 原本打算年 月 日 分別左移 時(shí)到最低位 然后整個(gè)對(duì)比起始日期和結(jié)束日期
回復(fù)

使用道具 舉報(bào)

8#
ID:47286 發(fā)表于 2018-10-2 21:22 | 只看該作者
sxhwdz 發(fā)表于 2018-10-2 17:24
b是8位的,左移16次,早就溢出變成0了,因此a=0,a右移16次自然還是0了。
b左移8次,1移入進(jìn)位標(biāo)志,一起 ...

謝謝前輩
回復(fù)

使用道具 舉報(bào)

9#
ID:47286 發(fā)表于 2018-10-2 22:02 | 只看該作者
sxhwdz 發(fā)表于 2018-10-2 17:24
b是8位的,左移16次,早就溢出變成0了,因此a=0,a右移16次自然還是0了。
b左移8次,1移入進(jìn)位標(biāo)志,一起 ...

再次感謝前輩提示 說(shuō)實(shí)話我沒看懂您說(shuō)的 但您的提示指示了思路 我試了一下 可以了 但還想再麻煩您和其它前輩看看我寫的過(guò)程 我覺得自己寫的比較笨 更好的寫法應(yīng)該是怎樣的

我寫的如下
unsigned long a;//需要使用的32位數(shù)據(jù)
unsigned long x;//用于8位-32位轉(zhuǎn)換的臨時(shí)變量
unsigned char b=1;//需要使用的8位數(shù)據(jù)
unsigned char c;//用于輸出的8位數(shù)據(jù)

x=0;//清零一下 因?yàn)槲也恢褂眠@一個(gè)變量 這里寫的只是個(gè)思路
x|=b;//把8位數(shù)據(jù)轉(zhuǎn)到32位數(shù)據(jù)
x<<=24;//左移24次 讓b數(shù)據(jù)到最高8位a|=x;//把臨時(shí)變量x值轉(zhuǎn)到需要使用的32位變量a中
/*到這里 完成8位數(shù)據(jù)到32位數(shù)據(jù)的轉(zhuǎn)換過(guò)程*/

/*下面是從32位數(shù)據(jù)轉(zhuǎn)換成8位數(shù)據(jù)輸出*/
x=a;//把在用的32位數(shù)據(jù)復(fù)制到臨時(shí)變量x中
c=x>>24;//把32位最高8位數(shù)據(jù)存儲(chǔ)到變量b中

return c;//返回c值
回復(fù)

使用道具 舉報(bào)

10#
ID:404980 發(fā)表于 2018-10-3 08:38 | 只看該作者
unsigned long a; unsigned char b=1; unsigned char c; a=b<<16; c=a>>16; return c;
回復(fù)

使用道具 舉報(bào)

11#
ID:404980 發(fā)表于 2018-10-3 08:39 | 只看該作者
unsigned long a; unsigned char b=1; unsigned char c;a=b; a=a<<16; c=a>>16; return c;
回復(fù)

使用道具 舉報(bào)

12#
ID:405006 發(fā)表于 2018-10-3 10:36 | 只看該作者
類型不一致,需要強(qiáng)制轉(zhuǎn)換
回復(fù)

使用道具 舉報(bào)

13#
ID:387733 發(fā)表于 2018-10-4 08:13 | 只看該作者
dzbj 發(fā)表于 2018-10-2 22:02
再次感謝前輩提示 說(shuō)實(shí)話我沒看懂您說(shuō)的 但您的提示指示了思路 我試了一下 可以了 但還想再麻煩您和其它 ...

不用那么復(fù)雜
如下即可:

unsigned long a;
unsigned char b=1;
unsigned char c;

        a=b;              // a=0x00000001
        a=a<<16;     // a=0x00010000
        c=a>>16;     //  c=0x01
回復(fù)

使用道具 舉報(bào)

14#
ID:396450 發(fā)表于 2018-10-4 17:54 | 只看該作者
b你設(shè)成unsigned char , 8位元無(wú)符號(hào), 左移16位元肯定是0
回復(fù)

使用道具 舉報(bào)

15#
ID:405392 發(fā)表于 2018-10-4 19:47 | 只看該作者
搞成一樣的,不要不同長(zhǎng)度一起搞
回復(fù)

使用道具 舉報(bào)

16#
ID:47286 發(fā)表于 2018-10-4 23:27 | 只看該作者
sxhwdz 發(fā)表于 2018-10-4 08:13
不用那么復(fù)雜
如下即可:

感謝回復(fù) 明白了
回復(fù)

使用道具 舉報(bào)

17#
ID:47286 發(fā)表于 2018-10-4 23:28 | 只看該作者
回復(fù) 14,15樓 感謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表