標(biāo)題: 請(qǐng)教個(gè)C語(yǔ)言長(zhǎng)整型的問題 [打印本頁(yè)]

作者: dzbj    時(shí)間: 2018-10-2 12:51
標(biāo)題: 請(qǐng)教個(gè)C語(yǔ)言長(zhǎng)整型的問題
unsigned long a;
unsigned char b=1;
unsigned char c;

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

return c;

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

左移和右移8位沒問題 16和24都不行 哪位前輩辛苦一下給講講

作者: mengzhixinheng    時(shí)間: 2018-10-2 16:17
類型不一致,強(qiáng)制轉(zhuǎn)換
作者: cccc888    時(shí)間: 2018-10-2 16:50
unsigned char 8位,0-255
??????左移16位,想干嘛?

作者: sxhwdz    時(shí)間: 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
作者: 迷一樣謙謙公子    時(shí)間: 2018-10-2 18:45
長(zhǎng)整形的和字符形的轉(zhuǎn)換會(huì)很出問題的
作者: dzbj    時(shí)間: 2018-10-2 21:18
mengzhixinheng 發(fā)表于 2018-10-2 16:17
類型不一致,強(qiáng)制轉(zhuǎn)換

前輩 給講講怎么強(qiáng)制轉(zhuǎn)換 以前在書上看過(guò) 問題是現(xiàn)在都想不起是哪本書了 慚愧
作者: dzbj    時(shí)間: 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í)遇到跨年的問題 比如起始月是11月 結(jié)束月是明年1月 就不能直接對(duì)比當(dāng)前日期>起始日期且<結(jié)束日期 所以想用移位的方法 把年月日時(shí)放入一個(gè)變量里 一個(gè)long是4個(gè)8位 原本打算年 月 日 分別左移 時(shí)到最低位 然后整個(gè)對(duì)比起始日期和結(jié)束日期
作者: dzbj    時(shí)間: 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)志,一起 ...

謝謝前輩
作者: dzbj    時(shí)間: 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值

作者: siduestc    時(shí)間: 2018-10-3 08:38
unsigned long a; unsigned char b=1; unsigned char c; a=b<<16; c=a>>16; return c;
作者: siduestc    時(shí)間: 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;
作者: 等愛木子    時(shí)間: 2018-10-3 10:36
類型不一致,需要強(qiáng)制轉(zhuǎn)換
作者: sxhwdz    時(shí)間: 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
作者: petertpi    時(shí)間: 2018-10-4 17:54
b你設(shè)成unsigned char , 8位元無(wú)符號(hào), 左移16位元肯定是0
作者: f1032276    時(shí)間: 2018-10-4 19:47
搞成一樣的,不要不同長(zhǎng)度一起搞
作者: dzbj    時(shí)間: 2018-10-4 23:27
sxhwdz 發(fā)表于 2018-10-4 08:13
不用那么復(fù)雜
如下即可:

感謝回復(fù) 明白了
作者: dzbj    時(shí)間: 2018-10-4 23:28
回復(fù) 14,15樓 感謝




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1