ˆ 好吧,几天讲的进制。有点晕了。。唉。
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 | int 、unsigned int |
U 或 u | unsigned int | unsigned int |
L或l | long int | long 、unsigned long int |
既有u或U,又有l或L | unsigned long int | unsigned long int |
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("\n"); 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.\n", 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 }
英语 : character(字符) keyword(关键字) reserved word(保留字)
好吧,今天发神经了。!!!!