黑馬程序員——C語言開門片內存分析,黑馬程序員開門
iOS培訓,iOS學習---------型技術博客、期待與您交流!------------
一、各種進制的總結
1.二進制
(1) 在c語言中二進制以0b開頭,輸出二進制格式沒有固定的格式,自定義輸出二進制格式的函數可以如下定義:
#include <stdio.h>
int main()
{
void printfBinary(int);
printfBinary(20);
return 0;
}
void printfBinary(int n)
{
int bits = sizeof(int) * 8; //計算出整型變量所占的字節數
while (bits-->0) {
//n的二進制形式向右移動bits個字節,然後同1進行按位與運算,保留原來的數值,進行打印。
printf("%d", n>>bits&1);
if (bits%4 == 0) {
printf(" ");
}
}
}
2. 八進制
八進制以 0 開頭, 使用 %o 輸出整數,不帶符號
3. 十六進制
十六進制以0x開頭,使用 %x 輸出整數
4. 十進制
c語言中除了上述三種格式的進制數外,普通的數據就是以十進制表示的。使用 %d 輸出帶符號整數, %u 輸出不帶符號整數
二、互換兩個變量值的方法
1.借助中間變量值的方法進行互換
假如兩個變量的值分別為: int a = 5, b=6; 如果通過另一個變量來交換,具體的代碼如下:
void swap()
{
int a = 5, b=6;
int c = a; //現將a的值放入c中
a = b;
b= c;
}
2. 直接交換
- a = b - a; //原來a變成兩值之差
- b = b - a; //原來b的值變為a
- a = b + a; //原來a的值變為b
3. 根據位或運算進行交換,利用位或運算定律 即 a^b^a = b
- a = a ^ b;
- b = a ^ b;
- a = a ^ b;
4.交換兩個數的做法,讓我想起一個面試題,如下
有兩個杯子,分別為A = 5ml 和B = 3ml ,問怎麼得到4ml 水, 水是無限的,但是不能使用另外的容器,此題想到有兩個方法:
(1) 先將盛滿水的A倒入 B 中,然後再將B容器倒出,剩余的A = 2 再倒入B , 盛滿 A 再倒入 B,這時A =4ml;
(2) 先將盛滿的 B 倒入 A中 ,然後 再盛滿B 倒入A中, B 這時為1ml ,倒出A,將B倒入A,然後 ,盛滿B再倒入A 即可得 A=4ml;