滴水课后作业(1-5)

滴水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);
View Code

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

 

转载于:https://www.cnblogs.com/binaryAnt/p/11147508.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值