|
實(shí)驗(yàn)筆記2 電路圖如實(shí)驗(yàn)1 使用printf函數(shù)需要頭文件#include <stdio.h> printf函數(shù)可以輸出格式化字符,而且可以將要顯示的數(shù)據(jù)發(fā)往串行口,這樣,使用串口調(diào)試工具就能觀察單片機(jī)傳來(lái)的數(shù)據(jù)了。 printf函數(shù)除了標(biāo)準(zhǔn)C的格式控制字符外還擴(kuò)展出了b、h、l來(lái)對(duì)字符寬度進(jìn)行限制。 其中:b表示8位,h表示16位(默認(rèn)值,可省略標(biāo)識(shí)符),l表示32位。 如果沒(méi)有寬度標(biāo)識(shí)符,除整形數(shù)據(jù)(int 和unsigned int 型)外,其余類型都會(huì)出現(xiàn)錯(cuò)誤。 如果不用寬度標(biāo)示符,也可以使用強(qiáng)制類型轉(zhuǎn)換的方法,將char 或unsigned char 的變量強(qiáng)制轉(zhuǎn)換成int 或unsigned int,最終實(shí)現(xiàn)的效果與使用寬度標(biāo)識(shí)符b、h、l完全相同。 %p是指針變量的格式輸出符。
例如:
printf("char d=%d\n",(int)d); //將顯示char d=10
在計(jì)算機(jī)內(nèi)存中,所有的負(fù)數(shù)都是以補(bǔ)碼的形式存放的, 例如: char a=-1; char b=3;
-1的原碼是 1000 0001 //最高位是符號(hào)位,0表示正,1表示負(fù) -1的反碼是 1111 1110 //最高位不變,其它各位求反 -1的補(bǔ)碼是 1111 1111 //最高位不變,在反碼的基礎(chǔ)上加1
那么a+b就是-1+3=2,它在內(nèi)存中的計(jì)算是: 1111 1111 //-1 0000 0011 //3 +--------------- 0000 0010 //2 符號(hào)位為正,正數(shù)的補(bǔ)碼就是它本身,所以結(jié)果為+2
char a=-1; char b=-2;
-1的原碼是 1000 0001 //最高位是符號(hào)位,0表示正,1表示負(fù) -1的反碼是 1111 1110 //最高位不變,其它各位求反 -1的補(bǔ)碼是 1111 1111 //最高位不變,在反碼的基礎(chǔ)上加1
-2的原碼是 1000 0010 -2的反碼是 1111 1101 -2的補(bǔ)碼是 1111 1110 (-1)+(-2)在內(nèi)存中的計(jì)算 1111 1111 //-1 1111 1110 //-2 +---------------- 1111 1101 //最高位為1表明這是一個(gè)負(fù)數(shù),是補(bǔ)碼形式,要想得到原碼,需要再求一次補(bǔ)碼,即: 【【原碼】補(bǔ)】補(bǔ)=原碼 對(duì)結(jié)果再求一次補(bǔ)碼可以得到原碼 1111 1101 //結(jié)果的補(bǔ)碼 1000 0010 //最高位不變,其它位求反 1000 0011 //在反碼的基礎(chǔ)上加1,得到結(jié)果的原碼=-3
|
|
|
來(lái)自: 360tsgyd > 《實(shí)驗(yàn)》