標(biāo)題: 關(guān)于C51單片機(jī)的位操作的問題 [打印本頁]

作者: zhuls    時(shí)間: 2022-12-7 09:42
標(biāo)題: 關(guān)于C51單片機(jī)的位操作的問題
////16位:
  int  j ;
while (i<16)
   {
    j=1<<i;
    i++;
  }
//這個(gè)操作正常,j從位0到位15,依次變?yōu)?;

  long  j ;
while (i<32)
   {
    j=1<<i;
    i++;
  }
//這個(gè)操作就不對(duì),i=15之后,j全是錯(cuò)的;


咋整?

如果要操作64位呢?該如何定義一個(gè)64位(48位)的變量?





作者: cccc888    時(shí)間: 2022-12-7 18:25
#include <REG52.H>

void main()
{ unsigned long  j ;
        unsigned char i;
while (i<32)
   {
    j=(unsigned long)1<<i;
    i++;
  }
while(1);

}
常數(shù)的默認(rèn)類型,指定一下,就可以了。
作者: DSDSADAS    時(shí)間: 2022-12-7 23:10
#include <REG52.H>

void main()
{ unsigned long  j ;
        unsigned char i;
while (i<32)
   {
    j=(unsigned long)1<<i;
    i++;
  }
while(1);

}
常數(shù)的默認(rèn)類型,指定一下,就可以了。
作者: yzwzfyz    時(shí)間: 2022-12-8 10:19
要保證被移位的對(duì)相,有足夠的位數(shù)給你移動(dòng),才是合理的。
作者: Longan.Wang    時(shí)間: 2022-12-8 10:43
本帖最后由 Longan.Wang 于 2022-12-8 11:01 編輯

你那個(gè)第一次循環(huán),左移一位,第二次循環(huán),左移二位,,第三次循環(huán),左移三位......
你覺得最后一其左移了多少位???????(1 + 2 + 3 + ...... + n)
這樣寫才對(duì):
int i = 0;
int j = 1 ;
while (i<16) {
    j <<= 1;      // 每次只左移一位
    i++;
}
// 到此一共左移16位
同樣
int i = 0;
long  j  = 1;
while (i<32) {
    j <<= 1;      // 每次只左移一位
    i++;
}
// 到此一共左移32位

作者: zhuls    時(shí)間: 2022-12-8 10:46
cccc888 發(fā)表于 2022-12-7 18:25
#include

void main()

真的哎~~
那64位變量又如何定義、操作呢?
作者: coody_sz    時(shí)間: 2022-12-8 11:54
首先,C51不支持64位的變量。
其次,你移位32位的,卻使用16位的變量,所以超過15位就會(huì)出錯(cuò)。改成下面的就不會(huì)錯(cuò)。
提醒一下,一般用于移位操作的話,最好使用無符號(hào)變量。
unsigned long  j ;
unsigned char i;
while (i<32)
   {
        j = (unsgned long)1 << i;
        i++;
  }
作者: zhuls    時(shí)間: 2022-12-8 13:13
Longan.Wang 發(fā)表于 2022-12-8 10:43
你那個(gè)第一次循環(huán),左移一位,第二次循環(huán),左移二位,,第三次循環(huán),左移三位......
你覺得最后一其左移了 ...

這個(gè)不是移位,是直接賦值。
j=1<<i;//把變量“j”的第“i”位設(shè)置為1。


     
作者: Hephaestus    時(shí)間: 2022-12-9 18:47
很簡(jiǎn)單的問題,C語言里面常量默認(rèn)是int類型的,C51的int是16位,1是常量,移位到16次就錯(cuò)了,解決方案板凳發(fā)言是對(duì)的,把常量類型強(qiáng)制轉(zhuǎn)換就行了。
作者: jxcrgt35    時(shí)間: 2022-12-10 12:30
j=1ul<<i;




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