滴水2015-01-12
1、2+3=1 成立吗?说明理由。
解题:上面式子由 3个符号组成,那么起码得用3进制以上的进制表示
三进制:2(0),3(1),1(2)
0+1=2不成立
四进制:
X(0) 2(1) 3(2) 1(3)
1+2=3 那么 2+3=1成立
2、将下面的二进制数用16进制表示 1100 1011 0101 0100 1110 1011 0101 0111 1011 0100 1010 1011
没什么好说的死记硬背就对了, C B 5 4 E B 5 7 B 4 A B
3、将下面的十六进制数用二进制表示 487FDC120ACE69B953FE
100(4) 1000(8) 111(7) 1111(F) 1101(D) 1100(C) 1(1) 10(2) 0(0) 1010(A) 1100(C) 1110(E) 110(6) 1001(9) 1011(B) 1001(9) 101()5 11(3) 1111(F) 1110(E)
4、二进制从0写到100(是100个数,每行写10个便于统计)
1 2 3 4 5 6 7 8 9 10
00000000 00000001 00000010 000000011 00000100 00000101 00000110 00000111 00001000 00001001
00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011
00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101
00011110 00011111 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111
00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001
00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011
00111100 00111101 00111110 00111111 01000000 01000001 01000010 01000011 01000100 01000101
01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111
01010000 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000 01011001
01011010 01011011 01011100 01011101 01011110 01011111 01100000 01100001 01100010 01100011
<1> 编制7进制加法表,乘法表,并计算下面的结果:
0 1 2 3 4 5 6
10 11 12 13 14 15 16
20 21 22 23 24 25 26
30 31 32 33 34 35 36
40 41 42 43 44 45 46
50 51 52 53 54 55 56
60 61 62 63 64 65 66
1+1=1
2+1=3 2+2=4
3+1=4 3+2=5 3+3=6
4+1=5 4+2=6 4+3=10 4+4=11
5+1=6 5+2=10 5+3=11 5+4=12 5+5=13
6+1=10 6+2=11 6+3=12 6+4=13 6+5=14 6+6=15
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=12
4*1=4 4*2=11 4*3=15 4*4=22
5*1=5 5*2=13 5*3=21 5*4=26 5*5=34
6*1=6 6*2=15 6*3=24 6*4=33 6*5=42 6*6=51
23456+54356=?
5621-654=?
234*65=?
<2> 编制16进制加法表,乘法表,并计算下面的结果:
注:纯手敲加乘法表,累死人,虐死人(当时心理活动,要不程序生成吧,心想太简单可以跳过,你怎么认为简单,不手敲你怎么证明你会?)
void foo(int n) {unsigned char nAry[256] = {"0123456789abcdefghijklmnopqrstuvwxyz" };n--;for (int i = 1; i <= n;i++) {for (int j = 1; j <= i;j++) {printf("%c*%c=\t", nAry[i], nAry[j]);}puts("");} } foo(16);
0 1 2 3 4 5 6 7 8 9 a b c d e f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
2D4E6+CF3A6=?
5FD1-E5A=?
2CA*A5=?
滴水2015-01-13
1、9进制定义:由9个符号组成,分别是:2、9、1、7、6、5、4、8、3,逢9进1 计算:123 + 234 = ?
计算这个题,先理解数轴计算方法。
先绘画一条数轴,计算 1-2=?
找到1的位置,向左数2格。等于-1
2、10进制定义:由10个符号组成,分别是:!、@、$、%、^、&、*、A、B、C,逢10进1 计算:@$$B + %AC& = ?
void convertResult(int v1,int base) {char buffer[1024] = { 0 };int nIndex = 0;do {buffer[nIndex++]=charList2[v1 % base];v1 /= base;} while (v1);while (nIndex--) {printf("%c",buffer[nIndex]);} } unsigned int symbolToNumber(char* p) {unsigned int nRet = 0 ;unsigned int nLength = 0;unsigned int nRight = 0;nLength = strlen(p);nRight = (unsigned int)pow(10, nLength-1);int count = 0;while (count < nLength) {int i = 0;for (i = 0; i < sizeof(charList2)-1;i++) {if (*(p + count)== charList2[i]) {break;}}nRet += i*(nRight);nRight /= 10;count++;}return nRet; } int main(int n) {char c1[256] = { "@$$B" };char c2[256] = { "%AC&" };convertResult(symbolToNumber(c1)+ symbolToNumber(c2),10);return 0; }
验证结果:
3、使用异或对 87AD6 进行加密后再进行解密,加解密密钥:5
滴水2015-01-14
003数据宽度_逻辑运算.xls
1、八进制数2-5 在计算器中的的结果是:1777777777777777777775 为什么?
自我理解:其实这没什么好奇怪的,如果你真要觉得奇怪,那么我倒要反问看官了,2-5=-3,你认为-3奇怪吗?当你看见0xFFFFFFFF表示为-1你奇怪吗?其实并不稀奇!
不管怎么说2-5=-3,-3始终在内存的排列情况不变。管你以十进制,八进制、十六进制输出,-3在内存是不会变化的
,calc.exe显示这样的结果,不就是分离-3在内存中的排列数据吗?多说无益,自己实现一个
unsigned char charList1[] = "0123456789abcdefghijklmnopqrstuvwxyz"; void calc(long long int nResult, int base) {int bit = 0;int i = 0;if (base==8) {bit = 7;}while (i < (sizeof(long long int) * 8) / 3) {printf("%c", charList1[nResult & bit]);nResult >>= 3;i++;}int y = 0;if (y = ((sizeof(long long int) * 8) % 3)) {int i = (int)pow(2,y-1);i = (i - 1) + i;printf("%c", charList1[nResult & i]);} }calc(2 - 5, 8);
懒得翻转了
2、使用异或对 87AD6 进行加密后再进行解密,加解密密钥:5
上面好像做过
3、只用逻辑运算计算2-3=?(涉及内容:逻辑运算、移位、数据宽度)
2-3 = 2+-3=? 求-3的补码,咋们假设4位的数据宽度0011 3的原码 1100 反码 1101 这就是-3的补码了0010 0010 xor 1101 and 1101 计算过程 --------------------1111 0000其结果是:1111 取1111的绝对值 1111 补码 0000 反码 0001 原码
004通用寄存器(1).xls
1、使用DTDebug打开一个EXE程序(F3),并找到寄存器窗口
2、使用DTDebug打开一个EXE程序(F3),单步执行程序(F8)
3、记住这个8个通用寄存器的名称,按照顺序。
ACDB SB SD
EAX,ECX, EDX, EBX, ESP,EBP,ESI,EDI
4、使用DTDebug打开一个EXE程序(F3),使用MOV指令修改8个寄存器的值,单步执行,观察修改后的结果。
滴水2015-01-15
理解作业。。
滴水2015-01-16
1、使用EBX存储栈底地址,EDX存储栈顶地址,连续存储5个不同的数.
2、分别使用栈底加偏移、栈顶加偏移的方式读取这5个数,并存储到寄存器中.
3、弹出这5个数,恢复栈顶到原来的位置.
4、使用2种方式实现:push ecx
5、使用2种方式实现:pop ecx
6、使用2种方式实现:push esp
7、使用2种方式实现:pop esp