原来电脑只会二进制O(∩_∩)O哈! 这节课视频有点长,80分钟,可能是我感觉知识点都挺多的吧,也不能算多,就是可能我理解的不太好,然后我变写代码边有着疑问去做视频,嘿嘿,把出现问题来如何解决的过程呈现出来,这样会更加知道以后自己出现新问题的解决方法! 下面是简单的介绍了下进制: 1.十进制: 0,1,2,3,4,5,6,7,8,9 到10进一 1 + 9 = 10 2.八进制: 0,1,2,3,4,5,6,7 到8进一 7 + 1 = 10 3.二进制: 0,1 到2进一 1 + 1 = 10 4.十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 到16进一 F + 1 = 10 .................还有许多进制,例如:3,4,5,6,7,9,11,12,13,14,15,17,18,19,20,60,120,。。。进制的 // 例如:十进制 1212120 = 1 * 10^6 + 2 * 10^5 + 1 * 10^4 + 2 * 10^3 + 1 * 10^2 + 2 * 10^1 + 0 * 10^0 权:10^6,10^5,10^4,10^3,10^2,10^1,10^0 八进制 1212120 = 1 * 8^6 + 2 * 8^5 + 1 * 8^4 + 2 * 8^3 + 1 * 8^2 + 2 * 8^1 + 0 * 8^0 权:8^6,8^5,8^4,8^3,8^2,8^1,8^0 二进制 1011011 = 1 * 2^6 + 0 * 2^5 + 1 * 2^4 +1 * 2^3 + 0 * 2^2 + 1* 2^1 + 1 * 2^0 权: 2^6,2^5,2^4,2^3,2^2,2^1,2^0 .........进制的都是一样的,都是有规律可循的 /// 例如: 十进制 2345.123 = 2 * 10^3 + 3 * 10^2 + 4 * 10^1 + 5 * 10^0 + <这里注意了>1 * 10^-1 + 2 * 10^-2 + 3 * 10^-3 二进制 1101.111 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 + <这里注意了>1 * 2^-1 + 1 * 2^-2 + 1 * 2^-3 其他进制也都是一样 的..... 这是讲解位运算时候出现的符号以及简便方法: &(位)与|(位)或 ~(位)取反 ^(位)异或 <<左移 >>右移 左移一次增大2倍,右移一次减少2倍 全部都是2进制!! 添加:x = x|.. 去除:x = x &~.. 代码我就贴到下面了自己观看写一遍吧!: /// 代码1: #include <stdio.h> #include <stdlib.h> int main() { int a, b, c; int d, e, f; a = 12; //00000000000000000000000000001100 b = 14; //00000000000000000000000000001110 c = a & b; //00000000000000000000000000001100 printf("%d\n", c);//12 //1100 c = a | b; //00000000000000000000000000001110 printf("%d\n", c);//14 //1110 d = 100; //1100100 -->00000000000000000000000001100100 e = ~d; //0011011 -->原码:11111111111111111111111110011011 // -->反码:10000000000000000000000001100100 // -->补码:10000000000000000000000001100101 printf("%d\n", e);//-101 //10000000000000000000000001100101 f = 33^44; //33:000000000000000000000000000100001 //44:000000000000000000000000000101100 // 000000000000000000000000000001101 printf("%d\n", f);//13 system("pause"); return 0; } 代码2: #include <stdio.h> #include <stdlib.h> int main() { int a; int b; a = 13; //http://www.bcwhy.com/thread-21592-1-1.html //0000 0000 0000 0000 0000 0000 0000 1101 b = a<<1; //0000 0000 0000 0000 0000 0000 0001 1010 printf("%d\n", b); //26 b = 15; //0000 0000 0000 0000 0000 0000 0000 1111 a = b>>2; // 00 0000 0000 0000 0000 0000 0000 0011 //a+1 printf("%d\n", a); printf("%d\n", a);//3 system("pause"); return 0; } /// 代码3: /* *0000 0000 0000 0000 0000 0000 1111 1011 *得到右边第4个数的值的头3个数值 11 1 * */ #include <stdio.h> #include <stdlib.h> unsigned Set(unsigned a, int p, int x) { //return a >> (p + 1 - x)&(~0 >> x); //|(0 >> x) return a >> (p + 1 - x) | (0 >> x); } int main() { unsigned int a; a = 251; //0000 0000 0000 0000 0000 0000 1111 1011 // 11 1 //0000 0000 0000 0000 0000 0000 0000 0000 //1111 1111 1111 1111 1111 1111 1111 1 printf("%d\n", Set(a, 5, 3));//31 system("pause"); return 0; } 代码4: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #define 小开关 1 // 0x1//0000 0000 0000 0000 0000 0000 0000 0001 #define 大开关 2 //0x2// 0000 0000 0000 0000 0000 0000 0000 0010 #define 密码开关 3 //0x3// 0000 0000 0000 0000 0000 0000 0000 0011 #define 主人开关 4 //0x4// 0000 0000 0000 0000 0000 0000 0000 0100 int main() { int 开关 = 0; 开关 = 开关 | 小开关; 开关 = 开关 | 大开关; 开关 = 开关 | 密码开关; 开关 = 开关 | 主人开关; printf("%d\n", 开关); //7 //0000 0000 0000 0000 0000 0000 0000 0111 开关 = 开关 & ~小开关; printf("%d\n", 开关); //6 MessageBoxA(NULL, "hello", "11111", 256|MB_ICONINFORMATION); system("pause"); return 0; } end! 学习需要努力,努力再努力---》写代码!! 视频地址http://www.bcwhy.com/thread-21592-1-1.html