day01作業(yè):
1币呵、short 有符號和無符號的取值范圍?
short 兩個(gè)字節(jié)(16位)
無符號數(shù)
最小: 0000 0000 0000 0000 0
最大: 1111 1111 1111 1111 65535
注意:可以使用等比數(shù)列求和公式計(jì)算
有符號數(shù)
最小: 1111 1111 1111 1111 -32768
(負(fù)數(shù)的0人為定義為-32768)
最大: 0111 1111 1111 1111 32767
2、short b抛杨;b=50000;printf("%d\n",b); -----> -15536
分析過程如下:
32769 2 -32768+(2)-1 -32767
50000 50000-32767 -32768+(50000-32767)-1 -15536
3、計(jì)算sizeof(stu1)=44
struct stu2{
int a; 4
char c; 4
int b; 4
short e; 4 (sizeof(short)+2*sizeof(char))
char arr[5]; 4
};
struct stu1{
short e; 4
int f[10]; 40
struct stu2 stu;
};
4荐类、端序問題(方式1 union 方式二 指針 (待續(xù)))
union test{
char a[4];
int i;
};
int checkCPU()
{
union test t;
t.i=0x12345678;//數(shù)據(jù)的低位
if(t.a[0]==0x78)
return 1;
else
return 0;
}
void main()
{
if(checkCPU()==1)
printf("小端對齊\n");//低地址對應(yīng)低位
else
printf("大端對齊\n");//高地址對應(yīng)低位
}
整數(shù)溢出補(bǔ)充
類比:溢出情況類似于汽車?yán)锍瘫聿老郑绯鲋蠓祷仄鹗键c(diǎn)。
計(jì)算一個(gè)整數(shù)的時(shí)候超過該整數(shù)所能容納的最大單位后玉罐,會發(fā)生溢出屈嗤,高位舍棄(其實(shí)就是當(dāng)一個(gè)較大的整數(shù)賦值給一個(gè)較小的整數(shù))
unsinged short a=0xffff;
a=a+1;
//a=a+100
printf("%d\n",a);
當(dāng)一個(gè)小的整數(shù)(負(fù)數(shù))賦值給一個(gè)較大的整數(shù)時(shí),符號位保留吊输。
short ab=-2;
i=ab;
printf("%x\n",i);
unsigned short m_a=0;
m_a=m_a-1;
printf("%d\n",m_a);
char ch=-1;
printf("%x",ch);
字符型 char與 unsinged char
unsinged char ch=0;
ch-=1;
printf("%d\n",ch); //255
轉(zhuǎn)義字符參照課件
浮點(diǎn)數(shù) float(4) double(8)
浮點(diǎn)數(shù)的效率低饶号,避免使用,內(nèi)存中不是單純的補(bǔ)碼運(yùn)算季蚂。
思考:比較兩個(gè)浮點(diǎn)數(shù)的大小茫船。
printf 使用方式參照課件
scanf
注意事項(xiàng):
char arr[100]={0};
scanf("%s",arr);//輸入一個(gè)字符串,以回車鍵扭屁,空格作為字符串結(jié)束標(biāo)識
printf("%s",arr);
//注意緩沖區(qū)溢出
char s[10]={0};
scanf("%s",s); //--->輸入asdffghhjjkk;lhjjjjj 會崩潰
//解決方式:調(diào)整數(shù)組的大小或者使用fgets(文件部分講解)
char str[10]={0};
scanf("%s",str);//he ha hou
printf("%s",str);//輸出he
//驗(yàn)證殘留的信息ha hou是存在于stdin流中算谈,而不是在鍵盤緩沖區(qū)中
char str[20];
char str1[20];
char str2[20];
scanf("%s",str);/*此處輸入:he ha hou */
printf("%s",str);
scanf("%s",str1);/*無需再輸入,對stdin流再掃描 */
scanf("%s",str2);/*無需再輸入,對stdin流再掃描 */
printf("\n%s",str1);
printf("\n%s",str2);
//鍵盤緩沖區(qū)殘余信息問題
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);//認(rèn)為回車作為輸入了
printf("a=%d c=%c\n",a,c);
//解決方式1:getchar();
//解決方式2:fflush(stdin);
運(yùn)算符 其余參照課件
++ --
分析: int i=5;
int a=i++ + ++i;
printf("%d\n",a); //a=12 不區(qū)分編譯器
//分析:
//相當(dāng)于
// i=i+1;
//int a=i+i;
//i=i+1;
//也可以這樣理解,運(yùn)算順序是自右向左的料滥,先計(jì)算++i,暫時(shí)不入棧然眼,
//統(tǒng)一將所有++i計(jì)算完成后一起入棧,這里就是6先進(jìn)棧幔欧,之后計(jì)算i++,先進(jìn)行賦值,因此6也進(jìn)棧了丽声,之后i+1=7.
int a=++i + ++i;
//備注:以VS為基準(zhǔn)礁蔗。
int j=0;
int m=1;
j=(++m)+(++m)+(++m);
j=(++m)+(++m)+(m++);
j=(m++)+(m++)+(m++);
j=(m++)+(m++)+(++m);
//對于不同的編譯器,同一行中出現(xiàn)了多次的++的行為不定雁社, (++i)+(++i)+(++i)執(zhí)行的順序可能不同,不深究浴井。
int a=++m;
int b=++m;
int c=++m;
j=a+b+c //j=9;
條件運(yùn)算符
等價(jià)于if語句,參照課堂Code
逗號表達(dá)式 參照課堂Code
用法:先計(jì)算左邊的值霉撵,在計(jì)算逗號右邊的值磺浙,最后取右邊的結(jié)果洪囤。