c語言中有無符號型別的輸出問題,C語言中有無符號型別的輸出問題

時間 2021-12-22 17:50:31

1樓:太陽雨

因為short和int型佔的位元組數不一樣,一般來說,int佔四個位元組,short佔兩個位元組(不同的系統分配的位元組數不一樣)。他們是以二進位制數存放在記憶體中的。你把-1賦給short型的a,輸出的時候,只取了後面的兩個位元組的內容,那個負號在前兩個位元組中。

你把-1賦給int型的a時,輸出的時候,取了四個位元組的內容,所以負號也被輸出了。

2樓:予所否者

計算 位數有 short int long 幾個型別 short<=int<=long

例如16位的int輸出為-32768到32767unsigene int 就為0到65535就像一個輪盤一樣 轉滿一圈會溢位也就是-1=65535 65536=0

3樓:匿名使用者

unsigned short xx = -1;

printf("%d", xx);

unsigned int yy = -1;

printf("%d", yy);

這段**編譯成彙編之後得到如下**

call ___main

movw $-1, 26(%esp)movzwl 26(%esp), %eaxmovl %eax, 4(%esp)movl $lc0, (%esp)

call _printf // 第一個printfmovl $-1, 28(%esp)movl 28(%esp), %eaxmovl %eax, 4(%esp)movl $lc0, (%esp)

call _printf // 第二個printf注意兩個printf呼叫之前的兩端**,不同之處在於將-1傳遞給printf的時候的資料傳遞指令

第一個用的是movzwl 第二個用的是movlmovzwl是將16位的資料拷貝到32位的低16位空間中,並且高位16未補0

這樣不難得出,最後傳到printf裡面的數字假設是m,它的高16位是0,低16為都是1,解釋為int就是65535了。

而movl都是同樣的32位操作,所以沒有任何轉化,結果還是-1。

4樓:匿名使用者

輸出無符號要用u;

printf("%u",a);

c語言中無符號字元型輸出用%什麼 5

5樓:

%ld 給你看看我的筆記

format 引數輸出的格式,定義格式為:

%[flags][width][.perc][f|n|h|l]type

規定資料輸出方式,具體如下:

1.type 含義如下:

d 有符號10進位制整數

i 有符號10進位制整數

o 無符號8進位制整數

u 無符號10進位制整數

x 無符號的16進位制數字,並以小寫abcdef表示x 無符號的16進位制數字,並以大寫abcdef表示f 浮點數

e/e 用科學表示格式的浮點數

g 使用%f和%e表示中的總的位數表示最短的來表示浮點數 g 同g格式,但表示為指數

c 單個字元

s 字串

s wchar_t字元(寬字元)型別字串% 顯示百分號本身

p 顯示一個指標,near指標表示為:***xfar 指標表示為:***x:yyyy

n 相連參量應是一個指標,其中存放已寫字元的個數2.flags 規定輸出格式,取值和含義如下:

無 右對齊,左邊填充0和空格

- 左對齊,右邊填充空格

+ 在數字前增加符號 + 或 -

0 將輸出的前面補上0,直到佔滿指定列寬為止(不可以搭配使用-)空格 輸出值為正時冠以空格,為負時冠以負號# 當type=c,s,d,i,u時沒有影響type=o,x,x時,分別在數值前增加'0',"0x","0x"

type=e,e,f時,總是使用小數點

type=g,g時,除了數值為0外總是顯示小數點3.width 用於控制顯示數值的寬度,取值和含義如下n(n=1,2,3...) 寬度至少為n位,不夠以空格填充0n(n=1,2,3...

) 寬度至少為n位,不夠左邊以0填充* 格式列表中,下一個引數還是width

4.prec 用於控制小數點後面的位數,取值和含義如下:

無 按預設精度顯示

0 當type=d,i,o,u,x時,沒有影響type=e,e,f時,不顯示小數點

n(n=1,2,3...) 當type=e,e,f時表示的最大小數位數

type=其他,表示顯示的最大寬度

.* 格式列表中,下一個引數還是width5.f|n|h|l 表示指標是否是遠指標或整數是否是長整數f 遠指標

n 近指標

h 短整數或單精度浮點數

l 長整數或雙精度浮點數

6樓:蒲珺委良策

顧名思義

就是無符號的意思!

即是說在取值時

取正值!

例如:int

型別可以去正負值

但如果你定義了

unsigned

int則只能取正值

不能取負值

否則編譯時就會報錯!

7樓:

%u輸出無符號10進位制,%mu中m表示位數,%lu表示無符號長整形

c語言中無符號長整型數的輸入輸出格式是什麼

8樓:小夏在深圳

以%開頭的都是輸出控制符。主要有%d、

%u、%ld、%p。

1、%d它的意思是按十進位制整型資料的實際長度輸出。

2、%u輸出無符號整型(unsigned)。輸出無符號整型時也可以用 %d,這時是將無符號轉換成有符號數,然後輸出。

3、%ld它的意思是輸出長整型資料。

4、%p 輸出變數的記憶體地址。

擴充套件資料

1、八進位制在c語言中,八進位制的輸出格式是 %o,八進位制是以0為開頭的數字,0後面的數字都要小於8,最大為7。

2、十六進位制十六進位制的輸出格式是 %x,十六進位制表示的數是0x12 ,這個0也是零。十六進位制有點特殊的地方是1-9是純數字,10-15是用a、b、c、d、e、f來表示的。

4、%d中的d並不表示integer,而是表示decimal(10進位制)。

9樓:非常可愛

式%u。

示例:intmain()

擴充套件資料c語言printf()輸出格式

%p指標

%s字串

%%"%"

%a(%a)浮點數、十六進位制數字和p-(p-)記數法(c99)%c字元

%d有符號十進位制整數

%f浮點數(包括float和doulbe)%e(%e)浮點數指數輸出[e-(e-)記數法]%g(%g)浮點數不顯無意義的零"0"

%i有符號十進位制整數(與%d相同)

%o八進位制整數e.g.0123

%x(%x)十六進位制整數()e.g.0x1234

10樓:短短長長長短

以%開頭的都是輸出控制器。主要是%d、%u、%ld、%p。

1、%是指根據十進位制整數資料的實際長度輸出。

2、%u輸出無符號整數。也可以使用%d輸出無符號整數。在這種情況下,將無符號整數轉換為有符號數,然後輸出。

3、%ld表示輸出長整型資料。

4、%輸出變數的記憶體地址。

11樓:

輸入輸出標準格式是 %lu

數值範圍不大時,輸入輸出也可用 %d %x %u %ld %lx 格式。

unsigned long ula = 0x70000000; // 數值範圍不大

unsigned long ulb = 0x80000000; // 數值範圍大

unsigned long ulc = 3;

printf("%lu 0x%x %ld\n",ula,ula,ula);

printf("%lu 0x%x %ld\n",ulb,ulb,ulb);

printf("%lu 0x%x %ld\n",ulc,ulc,ulc);

試試:unsigned long uld;

scanf("%u",&uld);

scanf("%d",&uld);

scanf("%ld",&uld);

scanf("%x",&uld);

就明白了。

c語言中的有符號型別和無符號型別有什麼區別

12樓:聽不清啊

有符號型別可以輸入正負均可。

無符號型別不能有負數的。

c語言中無符號輸出是什麼意思

13樓:

無符號就是將儲存單元的最高位當成數位,而不是當成符號位。同一個二進位制,最高位當成數位與當成符號位,其表示的值完全不同。如:

11111111111111111111111111101110二進位制,

當成無符號數時,其對應10進位制:4294967278當成有符號數時,其對應10進位制:-18

14樓:我和花花的故事

就是二進位制的最高位不是符號位。所輸出的值都是正數

c語言程式設計有符號和無符號整型變數顯示問題

15樓:柳光箋

#include

int main()

//注意下面第 42行

printf

語法:#include

int printf( const char *format, ... );

printf()函式根據format(格式)給出

的格式列印輸出到stdout(標準輸出)和其它引數中.

字串format(格式)由兩類專案組成 - 顯示到螢幕上的字元和定義printf()顯示的其它引數. 基本上,  你可以指定一個包含文字在內的format(格式)字串,也可以是對映到printf()其它引數的"特殊"字元. 例如本**

char name[20] = "bob";

int age = 21;

printf( "hello %s, you are %d years old\n", name, age );

顯示下列輸出:

hello bob, you are 21 years old

%s 表示, "在這裡插入首個引數,一個字串." %d 表示第二個引數(一個整數)應該放置在那裡. 不同的"%-codes"表示不同的變數型別, 也可以限制變數的長度.

code     格式

%c     字元

%d     帶符號整數

%i     帶符號整數

%e     科學計數法, 使用小寫"e"

%e     科學計數法, 使用大寫"e"

%f     浮點數

%g     使用%e或%f中較短的一個

%g     使用%e或%f中較短的一個

%o     八進位制

%s     一串字元

%u     無符號整數

%x     無符號十六進位制數, 用小寫字母

%x     無符號十六進位制數, 用大寫字母

%p     一個指標

%n     引數應該是一個指向一個整數的指標

指向的是字元數放置的位置

%%     一個'%'符號

一個位於一個%和格式化命令間的整數擔當著一個最小欄位寬度說明符,並且加上足夠多的空格或0使輸出足夠長. 如果你想填充0,在最小欄位寬度說明符前放置0. 你可以使用一個精度修飾符,它可以根據使用的格式**而有不同的含義.

用%e, %e和 %f,精度修飾符讓你指定想要的小數位數. 例如,

%12.6f

將會至少顯示12位數字,並帶有6位小數的浮點數.

用%g和 %g, 精度修飾符決定顯示的有效數的位數最大值.

用%s,精度修飾符簡單的表示一個最大的最大長度, 以補充句點前的最小欄位長度.

所有的printf()的輸出都是右對齊的,除非你在%符號後放置了負號. 例如,

%-12.4f

將會顯示12位字元,4位小數位的浮點數並且左對齊. 你可以修改帶字母l和h%d, %i, %o, %u和 %x 等型別說明符指定長型和短型資料型別 (例如 %hd 表示一個短整數). %e, %f和 %g 型別說明符,可以在它們前面放置l指出跟隨的是一個double.

 %g, %f和 %e 型別說明符可以置於字元'#'前保證出現小數點, 即使沒有小數位. 帶%x型別說明符的'#'字元的使用, 表示顯示十六進位制數時應該帶'0x'字首. 帶%o型別說明符的'#'字元的使用, 表示顯示八進位制數時應該帶一個'0'字首.

你可以在輸出字串中包含 連續的escape序列.

printf()的返回值是列印的字元數,如果發生錯誤則返回一個負值.

C語言中有哪些儲存型別,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍

千鋒教育 c語言中的儲存型別有auto,extern,register,static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區 bbs區 棧區 堆區。1.auto儲存型別 auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto...

c語言輸出問題為什麼多了兩個符號?怎麼消去

include include int main void if t i a t i z t i a t i z a c 0 printf s a printf d b return 0 在陣列a後面沒有新增 0 陣列結束點不確定,加一條語句a c 0 就好了 問題 將字元放入陣列a中後,沒有在最後...

C語言中關於“有效數字”的問題,在c語言中,有效數字和有效數位怎麼解釋?

當你輸入2.2e2時a 4.84,而輸入2.2e 2時a 0.20661157024793388429752066115702.它們的是float型,放在記憶體中是 2.2e2 01000011 0,1011100 00000000 00000000,2.2e 2 00111100 1,010010...