黑马程序员——C语言开门片内存分析

 

一、各种进制的总结

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. 直接交换

  1. a = b - a;   //原来a变成两值之差  
  2. b = b - a;   //原来b的值变为a  
  3. a = b + a;   //原来a的值变为b  

3. 根据位或运算进行交换,利用位或运算定律 即 a^b^a = b
  1. a = a ^ b;  
  2. b = a ^ b;  
  3. 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;
 
 
 
 
 
原文地址:https://www.cnblogs.com/ITmgc/p/4423062.html