欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
12
返回列表 發(fā)新帖
樓主: censv
打印 上一主題 下一主題
收起左側(cè)

表現(xiàn)奇怪的C語言0x80 正數(shù)?負(fù)數(shù)?bug?

  [復(fù)制鏈接]
41#
ID:384109 發(fā)表于 2022-9-26 18:58 | 只看該作者
censv 發(fā)表于 2022-9-26 18:00
那你的意思是常量沒有類型?

不是常量沒有類型,而是類型不分常量或變量,否則有符號數(shù)怎么和負(fù)數(shù)常量做比較
回復(fù)

使用道具 舉報

42#
ID:1043747 發(fā)表于 2022-9-29 13:51 | 只看該作者
人中狼 發(fā)表于 2022-9-26 18:58
不是常量沒有類型,而是類型不分常量或變量,否則有符號數(shù)怎么和負(fù)數(shù)常量做比較

我問 0x80 常量是什么類型,你說 這樣問是偏了,你的偏了是什么意思?
你又說,常量不是沒有類型,那你意思就是常量可能有類型。那常量什么情況下有類型?什么情況下沒有?
回復(fù)

使用道具 舉報

43#
ID:59202 發(fā)表于 2022-9-29 17:02 | 只看該作者
樓主不是偏了,是有探究精神,但還需要多多努力學(xué)習(xí),我們大家都是這樣走過來的。對于0x80,我們回歸本質(zhì)在單片機(jī)中就是10000000,它可以是指令也可以是數(shù)據(jù)。而做為數(shù)據(jù)在編譯軟件的眼里它也是多種可能,你規(guī)定它是無符號數(shù)char它就是128,你規(guī)定它是有符號char它就是-128,甚至如果編譯軟件里有規(guī)定它還可以表示浮點(diǎn)數(shù),這都不奇怪。我們學(xué)習(xí)c語言就要遵循它的規(guī)定,你違反了它的規(guī)定就會得到錯誤的結(jié)果這很正常
回復(fù)

使用道具 舉報

44#
ID:392485 發(fā)表于 2022-9-29 17:47 | 只看該作者
你把0x80放到 char型和int型中結(jié)果是不一樣的。定義成int型之后結(jié)果就不一樣了,因?yàn)榈?位在char型中是個特殊位,在移位的時候會先看是做為正數(shù)處理還是作為符號位處理。keil是8位機(jī)的C語言。
回復(fù)

使用道具 舉報

45#
ID:146878 發(fā)表于 2022-9-30 01:10 | 只看該作者
是keil沒按C標(biāo)準(zhǔn),樓主按C標(biāo)準(zhǔn)了?
編譯器只要不明寫“該語句不是合法C語言”,那就是合法了。編譯不出來是編譯器的問題。
樓主說了寫常量0x80就應(yīng)該是正數(shù),大家記住,無論身處何地它就是正數(shù),以后開發(fā)編譯器,別亂猜類型。

回復(fù)

使用道具 舉報

46#
ID:146878 發(fā)表于 2022-9-30 01:20 | 只看該作者
censv 發(fā)表于 2022-9-26 18:00
那你的意思是常量沒有類型?

常量可以有數(shù)據(jù)類型,但是你得表明是什么類型。不然編譯器不知道你要做什么類型。你不標(biāo)明,那編譯器只能根據(jù)你的表達(dá)式去猜測你寫的常量是什么類型。
回復(fù)

使用道具 舉報

47#
ID:146878 發(fā)表于 2022-9-30 01:29 | 只看該作者
censv 發(fā)表于 2022-9-14 06:15
if當(dāng)然是判斷真假,a != x80,因?yàn)閍表示為負(fù)數(shù),不等于正數(shù)的字面量0x80,是對的。
但在第二個例子,0x8 ...

這樣理解 != ,頭回見,頭回見。
。。。。。我沒說你理解的是錯的或怎么的,只是這理解方式,,頭回見。哈哈哈。
回復(fù)

使用道具 舉報

48#
ID:146878 發(fā)表于 2022-9-30 01:55 | 只看該作者
我送樓主個例子,相信樓主會更加堅(jiān)信自己的見解,keil有bug,這么多年無人發(fā)現(xiàn)?
void main(void)
{
  signed char    a = 0x80;
  unsigned char b = 0x80;
  while(1)
  {
  if(a==b)
    LED0= 1; //如果進(jìn)這里,那就是keil出bug了,啊哈哈哈哈哈。
  else
    LED0= 0;
  if(a>0)
    LED1= 1;
  else
    LED1= 0;
  if(b>0)
    LED2= 1;
  else
    LED2= 0;
    a++;
    b++;
  }
}
回復(fù)

使用道具 舉報

49#
ID:740383 發(fā)表于 2022-9-30 10:22 | 只看該作者
xxxevery 發(fā)表于 2022-9-29 17:02
樓主不是偏了,是有探究精神,但還需要多多努力學(xué)習(xí),我們大家都是這樣走過來的。對于0x80,我們回歸本質(zhì)在 ...

無符號范圍char是0-255,,有符合范圍char是-128~+128,這里如果是數(shù)據(jù),就是128,怎么規(guī)定它是浮點(diǎn)?它現(xiàn)在表示的是整數(shù),換算十進(jìn)制:128,想要定義為浮點(diǎn)float或者Double還需要加小數(shù)點(diǎn):128.0,并且也不是你這樣描述的!盲猜樓主是想使用unsigned char與或運(yùn)算,但是沒有&清零多余位.......
回復(fù)

使用道具 舉報

50#
ID:1043747 發(fā)表于 2022-9-30 16:46 來自觸屏版 | 只看該作者
我在此聲明一下,不要把0x80復(fù)制給變量,再來討論變量。這種討論和問題無關(guān)
回復(fù)

使用道具 舉報

51#
ID:740383 發(fā)表于 2022-10-5 10:19 | 只看該作者
服,LED引腳初始化了嗎???輸入?輸出?準(zhǔn)雙向?推挽?LED:0點(diǎn)亮還是1點(diǎn)亮???先不說定義,代碼本身就有問題
回復(fù)

使用道具 舉報

52#
ID:275826 發(fā)表于 2022-10-7 07:22 | 只看該作者
0x80在沒有賦值給變量之前就是整形常量,是正數(shù)128
回復(fù)

使用道具 舉報

53#
ID:275826 發(fā)表于 2022-10-7 07:25 | 只看該作者
pdwdzz 發(fā)表于 2022-9-30 01:55
我送樓主個例子,相信樓主會更加堅(jiān)信自己的見解,keil有bug,這么多年無人發(fā)現(xiàn)?
void main(void)
{

C51的關(guān)系運(yùn)算==編譯成XRL,是有bug
回復(fù)

使用道具 舉報

54#
ID:526108 發(fā)表于 2022-10-7 08:23 | 只看該作者
188610329 發(fā)表于 2022-9-12 11:49
正負(fù)數(shù),是人為劃定的一個范圍,你要判斷正負(fù),也是應(yīng)該用if(a

0x80是常量,常量都已unsigned處理
回復(fù)

使用道具 舉報

55#
ID:526108 發(fā)表于 2022-10-7 08:35 | 只看該作者
常量都是以unsigned處理
常量<常量 == unsigned<unsigned

變量比較都是以變量作為單位
unsigned char<常量 == unsigned char<unsigned char
char<常量 == char<char

反匯編可以看這兩條c語言所編譯出來的匯編指令是不一樣的
回復(fù)

使用道具 舉報

56#
ID:384109 發(fā)表于 2022-10-7 14:41 | 只看該作者
不管常量還是變量,都是先定義類型,再定義數(shù)值的,而且編程語言里還有隱性規(guī)則的,為什么正數(shù)128我們不用寫正號,就是因?yàn)殡[性約定只有負(fù)數(shù)要寫符號,樓主一再強(qiáng)調(diào)0X80是什么數(shù),確一直不能理解是需要先定義數(shù)據(jù)類型的,這個無法理解樓主為啥想不通,而且又看了樓主的例子,第一個例子if(a != 0x80),這是一個比較兩個數(shù)是否相同而已,又不在于是否有符號
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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