zoukankan      html  css  js  c++  java
  • 02.数据宽度和逻辑运算

    BYTE 字节 8bit
    WORD 字 16bit
    DWORD 双字 32bit
    计算机只认识0,1
    计算机只会做逻辑运算

    1.CPU是如何计算2+3=?
    def logical_add(n1, n2):
    a = n1 ^ n2
    b = n1 & n2
    b <<= 1

    if b == 0:
        return a
    else:
        return logical_add(a, b)
    

    2.如果想获取某个值的笫N位的值是多少?
    def n_binary(num, n):
    if n < 0:
    return -1
    else:
    return int((num & 1 << n) > 0)
    3.最简单的加密算法异或(要加密的数据0x2015, 密钥0x54):
    加密
    0010 0000 0001 0101
    0101 0100 0101 0100
    0111 0100 0100 0001

    0x7441

    解密
    0111 0100 0100 0001
    0101 0100 0101 0100
    0010 0000 0001 0101

    0x2015

    1.八进制数2-5, 在计算器中的的结果是:1 777 777 777 777 777 777 775‬为什么?
    本质:计算机只管存储二进制, 其他进制只是表现形式
    64bit
    2 - 5
    -3
    11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111101
    1 111 111 1 11 111 111 111 111 11 1 111 111 1 11 111 111 111 111 11 1 111 111 1 11 111 101
    1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5
    2.使用异或对87AD6进行加密后再进行解密,加解密密钥:5
    87AD6
    5

    加密
    1000 0111 1010 1101 0110
    0101 0101 0101 0101 0101
    ^
    1101 0010 1111 1000 0011
    D 2 F 8 3
    0xD2F03

    解密
    1101 0010 1111 1000 0011
    0101 0101 0101 0101 0101
    ^
    1000 0111 1010 1101 0110
    8 7 A D 6
    0x87AD6

    3.只用逻辑运算计算2-3=?(涉及内容:逻辑运算、移位、数据宽度)
    2-3
    0010
    1101

    ^
    1111
    &
    0000

    1111
    -1

    1.使用DTDebug打开一个EXE程序(F3),并找到寄存器窗口
    2.使用DTDebug打开一个EXE程序(F3),单步执行程序(F8)
    3.记住这8个通用寄存器的名称,按照顺序
    4.使用DTDebug打开一个EXE程序(F3),使用MOV指令修改8个寄存器的值,单步执行,观察修改后的结果。

  • 相关阅读:
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    IOS设计模式之一(MVC模式,单例模式)
    C#调用C++导出(dllexport)方法
    C# 多任务之 Task
    C# Remoting的一个简单例子
    C#中指针使用总结
    C# fixed详解
    C#中virtual和abstract的区别
  • 原文地址:https://www.cnblogs.com/ret688/p/12825993.html
Copyright © 2011-2022 走看看