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...