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

標題: IAR STM8 C語言中定義的unsigned long int數據類型最大值只能是32768 [打印本頁]

作者: donny123800    時間: 2022-6-7 20:09
標題: IAR STM8 C語言中定義的unsigned long int數據類型最大值只能是32768
我想在IAR STM8S  中定義一個4字節變量  存放充值的金額,結果當數據  CZ超過32768的時候就錯誤了!不知道是哪里出問題了~~大神指點下吧~unsigned   long   int   CZ;
.
CZ=CZ+num2;  
.

作者: Hephaestus    時間: 2022-6-7 21:58
要學會查編譯器手冊。
作者: 17337161031    時間: 2022-6-7 22:00
你查一下 long int 是幾位數據,應該是達到最大值 超出范圍
作者: donny123800    時間: 2022-6-7 23:42
17337161031 發表于 2022-6-7 22:00
你查一下 long int 是幾位數據,應該是達到最大值 超出范圍

我理解的long  int  應該是4個字節的數據!但是實際上這個值只能取到32767以內
作者: Hephaestus    時間: 2022-6-7 23:55
donny123800 發表于 2022-6-7 23:42
我理解的long  int  應該是4個字節的數據!但是實際上這個值只能取到32767以內

你要學會查閱編譯器手冊的能力。
作者: lkc8210    時間: 2022-6-8 09:28
donny123800 發表于 2022-6-7 23:42
我理解的long  int  應該是4個字節的數據!但是實際上這個值只能取到32767以內



作者: donny123800    時間: 2022-6-8 17:28
lkc8210 發表于 2022-6-8 09:28

多謝!我換個類型試試看!
作者: 188610329    時間: 2022-6-8 18:02
donny123800 發表于 2022-6-7 23:42
我理解的long  int  應該是4個字節的數據!但是實際上這個值只能取到32767以內

一般情況下,long是long,int是int。
long int 應該是你自創的類型,自創類型不是不可以,但你如果希望達到你的預期效果的話,是不是應該把編譯器先設定好?
作者: donny123800    時間: 2022-6-8 21:45
188610329 發表于 2022-6-8 18:02
一般情況下,long是long,int是int。
long int 應該是你自創的類型,自創類型不是不可以,但你如果希望 ...

long 定義的變量一樣的不能超過32767  只要超過這個范圍一定出錯~
作者: donny123800    時間: 2022-6-8 21:45
17337161031 發表于 2022-6-7 22:00
你查一下 long int 是幾位數據,應該是達到最大值 超出范圍

4字節的數據
作者: donny123800    時間: 2022-6-8 21:46
donny123800 發表于 2022-6-8 21:45
long 定義的變量一樣的不能超過32767  只要超過這個范圍一定出錯~

所以不知道是哪里出問題了!多謝大俠指點哈!
作者: Hephaestus    時間: 2022-6-8 22:23
donny123800 發表于 2022-6-8 21:46
所以不知道是哪里出問題了!多謝大俠指點哈!

六樓已經貼出編譯器手冊,那就不是long數據長度的問題,應該出在別的地方,多貼一些代碼。
作者: donny123800    時間: 2022-6-9 08:23
Hephaestus 發表于 2022-6-8 22:23
六樓已經貼出編譯器手冊,那就不是long數據長度的問題,應該出在別的地方,多貼一些代碼。

問題就是現在我給變量直接賦值  如果取值在0~32767 這個范圍內就正常    取值32768~65536 之間就錯誤   超出65536就正常  就是不知道是哪里出問題了!本人實在是菜鳥!找不到問題在哪里了!
作者: startxk    時間: 2022-6-9 09:19
有符號整形變量int型的,在c語言里面規定是用兩個字節也就是16個二進制位來表示的。最高為用來表示正負,后面還有15位數,于是一共可以表示2的15次方個數字,也就是32768個,但是呢,數字0是用的16個二進制0表示的,所以正數只能到32767了,負數則是到-32768。所以它是因為變量為負數報錯。
作者: startxk    時間: 2022-6-9 09:37
int本來不就是16位么? 在很久很久以前,C語言才出現的時候,計算機的字寬是16位,int于是也就是16位. 后來出現了32位機的時候,int才有32位寬.不過在8位和16位的CPU上,int還是16位.這是編譯器的問題,如果編譯器將int認為16位,那么在這個編譯環境中就是16位,如:Keil C和IAR中int都是16位,在IAR FOR STM8中用unsigned long int\unsigned int\unsigned long\long都不行,最多只能到16位了。此外IAR會把用完的局部變量優化掉。最好定義為全局變量然后觀察,不然,有可能被優化掉了,什么也看不到;int型通常就是16位。
作者: donny123800    時間: 2022-6-9 11:21
startxk 發表于 2022-6-9 09:37
int本來不就是16位么? 在很久很久以前,C語言才出現的時候,計算機的字寬是16位,int于是也就是16位. 后來出現 ...

好勒!多謝!按照你這個思路應該是可以解決了!




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