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

2021-12-23 01:09:49 字數 4162 閱讀 1643

1樓:it孤鶩

首先 0xe0 十進位制是 14*16=224 你用有符號的char 儲存其實是儲存了 224-256=-32

%x 輸出的是十六進位制數 其實是 -32的十六進位制%d 其實就是輸出 -32

第三個是有符號 就是224 了

2樓:慧當領絕頂

挺有意思的題目。逐條解釋吧。

首先要明白char是按一個位元組儲存的,int是按4個位元組的儲存的,無符號數是和正數的符號位一樣。

%x按4個位元組列印十六進位制(有符號),%d按4個位元組列印十進位制(有符號)。

第一個列印:要按4個位元組的%x格式列印一個位元組的char型,所以輸出了這麼多。

%d輸出的第二個:要以有符號的格式%d輸出一個無符號的數ic,所以會輸出負數。

%d輸出的第三個:要以有符號而且是4位元組的格式%d輸出一個無符號而且是一個位元組的char型,所以得到224。

3樓:

32(十進位制): 0000 0000 0000 0000 0000 0000 0010 0000(二進位制) : 00000020 (十六進位制)

-32: 1111 1111 1111 1111 1111 1111 1110 0000 : ffffffe0

4樓:說歷史的大白

%x輸出的是資料的16進位制,%d輸出的是整數。

5樓:happy公孫皓

%x輸出的是無符號十六進位制數

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

6樓:柳光箋

#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()的返回值是列印的字元數,如果發生錯誤則返回一個負值.

7樓:企鵝一丿

編譯系統無法檢查你的這個錯誤

8樓:匿名使用者

在輸出i的時候不應該用%d,如果是%d的話會牽涉到強制轉換,寫成%u就可以了

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

9樓:

%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 長整數或雙精度浮點數

10樓:蒲珺委良策

顧名思義

就是無符號的意思!

即是說在取值時

取正值!

例如:int

型別可以去正負值

但如果你定義了

unsigned

int則只能取正值

不能取負值

否則編譯時就會報錯!

11樓:

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

c語言輸入輸出問題

緩衝區裡資料沒清空 include void main 這樣就對了,每次輸入後強制清空標準輸入流 問題出在你定義的結構體 char birthday 7 char workdate 7 改成char birthday 8 char workdate 8 你輸入的是7個字元。但是作為字串儲存的時候,末...

C語言中無符號整數變數賦負整數為什麼不報錯,而且列印這個數也是負數

給一個無符抄號變數賦一個負數,就襲把這個 bai負數 的補碼當du 正數對待了 unsigend的級zhi別高於int 這和dao給一個浮點變數賦一個整型數時被提升為浮點型一樣 這符合c c 的自動型別轉換規則,所以不報錯。至輸出還是負數恐怕不對,除非你強制為int型輸出,否則輸出是無符號的。沒有圖...

C語言有些符號(如無法在迴圈里正常輸出,但是單獨又能輸出是什麼情況?如圖

這裡不是無法列印,而是列印出來又因為格式字元的影響而被覆蓋了有些字元是不會顯示輸出的,如7 響鈴等 值 8 9 10 和 13分別轉換為退格 製表 換行和回車字元。它們並沒有特定的圖形顯示,但會依不同的應用程式,而對文字顯示有不同的影響 如上面列印完第七個字元 響鈴字元,不會顯示 後,第八個是退格,...