嵌入式培训学习历程第十二天

ˆ  好吧,几天讲的进制。有点晕了。。唉。

  1.数的表示 :

      基数 : 用来组成某种进制数的可用的数字的个数

      权值 :某种进制数各位数表示的数的大小

  2. 十进制转二进制

      除二反向取余法

      按权展开

      扩展 : 二进制转十进制  :   按权相加

  3.二进制数的权值

  0  1  2  3  4    5    6    7      8      9      10

  1  2  4  8  16  32  64  128  256  512  1024

  4.十六进制超过十之后的值用字母表示

    A 10   B 11  C 12  D 13  E 14  F 15

  加油站 : 小数转化为二进制  使用  乘二取整法

  5.原码,反码,补码规则

    N的补码(8位):
    正数 : 0(最高位)+ N的二进制展开
    负数: 1(最高位)+ N的绝对值二进制展开,符
    号位保持不变,其他位按位取反再加1

  有符号数的范围 :-2ˆ(n - 1)≈ 2ˆ(n - 1)- 1 

  无符号数的范围 :0 ≈ 2ˆn - 1

    扩展 : 人为规定,- 2ˆ4  二进制  1000

  6.   实现定义(Implementation defined):C标实现定义(Implementation-defined):C标准未明确说明,但是编译器会明确定义,编译器文档中有明确定义。译器文档中有明确定义    

    如char类型是被当作无符号型还是有符号型,C

    标准中未明确说明,但不同的编译器是有明确    

    标准中未明确说明 但不同的编译器是有明确规定的

  7.  整常量

后缀   十进制常量 八进制,十六进制常量

int
long int
long long int

int 、unsigned int
unsigned
long 、unsigned long int
long long 、unsigned long long

U 或 u

unsigned int
unsigned long int
unsigned long long

unsigned int
unsigned long int
unsigned long long

L或l

long int
long long int

long 、unsigned long int
long long 、unsigned long long

既有u或U,又有l或L

unsigned long int
unsigned long long

unsigned long int
unsigned long long

LL或ll

long long int

long long 、unsigned long long

既有 u或U 又有ll或LL

unsigned long long unsigned long long

    注意 :整常数么有 short 型  

8. 整形提升 (提升为int 或 unsigned int)

    (1). 三种数据类型 : char, short, bit-filed(结构体)

    (2). 两种情况 ;

            1.函数参数列表中出现‘...’

            2.算术运算中的类型转换

            注意: 位截断和位拓展

  重要:

    

  9.类型转换 : 赋值和强制类型转换两种方式。

  10. 位域 

      (1). 数据在位域中不一定是连续存放的

      (2).不能够进行取址运算

  课后习题 :1.把十进制数转换成2进制,8进制, 16进制 。

#include <stdio.h>
typedef enum {hex_2 = 2, hex_8 = 8, hex_16 = 16}hex;

void change_hex(int, int []);
int input_hex(int , int [], int);

int main(int argc, char *argv[])
{
    int num[1024];
    int num_10;

    printf("Enter 10_hex numbers : ");
    scanf("%d", &num_10);

    change_hex(num_10, num);

    return 0;    
}

void change_hex(int change_num_10, int change_num[1024])
{
    int change_itemp;
    hex n;

    printf("Enter 2 8 16 to choose 2_hex, 8_hex, 16_hex :");
    scanf("%d", &change_itemp);

    switch(change_itemp)
    {
        case hex_2 :
            input_hex(change_num_10, change_num, 2);
            break;
        case hex_8 :
            input_hex(change_num_10, change_num, 8);
            break;
        case hex_16 :
            input_hex(change_num_10, change_num, 16);
            break;
        default :
            printf("Enter error!!");
            return ;
    }

    return ;
}

int input_hex(int input_num_10, int input_num[1024], int input_n)
{
    int i  = 0;
    int num = input_num_10;

    do {
        input_num[i] = input_num_10 % input_n;
        input_num_10 /= input_n;
        i ++;
    }while( 0 != input_num_10);

    printf("The num %d to %d is : ", num, input_n);
    if(16 == input_n) {
        printf("0x");
    }
    if(8 == input_n) {
        printf("0");
    }
    for(i = i - 1; i >= 0; i --)
    {
        if(16 == input_n) {
            if(input_num[i] > 10) {
                printf("%c", ('A' + (input_num[i] - 10)));
                continue;
            }
        }
            printf("%d", input_num[i]);
    }
    printf("
");

    return 0;
}
进制转换源码

       2.计算输入一个自然数转换成二进制后,有多少个1

  1 #include <stdio.h>
  2 
  3 void number_1(int [], int);
  4 
  5 int main(int argc, char argv[])
  6 {
  7     int num;
  8     int bijiao_num[2] = {0};
  9 
 10     printf("Enter a number : ");
 11     scanf("%d", &num);
 12 
 13     number_1(bijiao_num, num);
 14 
 15     printf("The number %d have %d number:1.
", num, bijiao_num[1]);
 16 
 17     return ;
 18 }
 19 
 20 void number_1(int number_1_num[2], int num)
 21 {
 22     int itemp = 0;
 23     do {
 24         itemp = num % 2;
 25         ++ number_1_num[itemp];
 26     }while(num /= 2);
 27 
 28     return ;
 29 }
View Code

    英语 : character(字符)  keyword(关键字)  reserved word(保留字)

        好吧,今天发神经了。!!!!

原文地址:https://www.cnblogs.com/cxw825873709/p/3226006.html