zoukankan      html  css  js  c++  java
  • c语言学习笔记(12)——补码

    补码
    编码
    在计算机中存储数据的方式
    原码
    也叫 符号——绝对值码
    最高位0表示正 1表示负, 其余二进制位是该数字的绝对值的二进制位
    如 5 ———— 00000101
      -5 ———— 11110101
    原码简单易懂
    加减运算复杂
    存在加减乘除四种运算,增加了CPU运算的复杂度
    零的表示不唯一
    反码
    反码运算不便,也没有在计算机中应用
    移码
    移码表示数值平移n位, n称为移码量
    移码主要用于浮点数的阶码的存储
    补码
    十进制转二进制
    正数转二进制
    除2取余,直至商为零,余数倒叙排序
    负数转二进制
    先求与该负数相对应的正数的代码,然后将
    所有位取反,末尾加1,不够位数时,左边补1
    零的二进制是零
    ----------------------------------------------------------------------
    /*
    一个验证程序
    2012年2月5日20:20:26
    */
    # include <stdio.h>


    int main(void){
    int i = -100;
    printf("%#x ", i);
    /*
    100转十六进制64----->二进制 0110 0100---->取反 1001 1011
    加1  1001 1100 末尾加1  0xffffff9c
    */
    return 0;
    }
    输出结果:0xffffff9c
    ----------------------------------------------------------------------
    二进制转十进制
    如果首位是0,则表明是正数,按普通方法来求
    如果首位是1,则表明是负整数
    将所有位取反,末尾加1,所得数字就是该负数的绝对值
    ------------------------------------------------------------------------
    /*
    一个验证程序
    2012年2月5日20:30:42
    */
    # include <stdio.h>


    int main(void){
    int i = 0xffffffef;
    /*
    1111....101111
    取反加1后 0000....010001 对应十六进制11  十进制 17
    */
    printf("%d ", i);
    return 0;
    }
    输出结果:-17
    ------------------------------------------------------------------------
    1.在vc++6.0中一个int类型的变量所能存储的数字的范围是多少?
    8位二进制所代表的十进制示意图
     二进制 十进制
    0000 0000 -----------  0
    0000 0001 -----------  1
    .........
    0111 1111 ----------- 127
    1000 0000 --取反加1-- -128
    1000 0001 --取反加1-- -127
    1000 0010 --取反加1-- -126
    .........
    1111 1111 --取反加1-- -1
     所以int类型变量所能存储的最大正数用十六进制表示是: 0x7fff ffff
     int类型变量所能存储的绝对值最大的负数用十六进制表示是:0x8000 0000
    ------------------------------------------------------------------
    /*
    一个验证程序
    2012年2月5日20:57:10
    */
    # include <stdio.h>


    int main(void){
    char cha = 0x7f; //0111 1111   127
    printf("%d ", cha);


    char ch = 0x80;  //1000 0000   -128
    printf("%d ", ch);

    char c = 128;   // 1000 0000   -128
    printf("%d ", c); 

    return 0;
    }
    输出结果:
    127
    -128
    -128
    ------------------------------------------------------------------
    2.最小负数的二进制代码是多少?
    3.最大正数的二进制代码是多少?
    4.已知一个整数的二进制代码求出原始的数字
    5.数字超过最大正数会怎样?
    6.不同类型数据的相互转换
























  • 相关阅读:
    [翻译]WP 平衡球游戏开发教程(一) 初识 XNA Farseer Magic
    Windows Phone7开发必备资源汇总
    WP7的XML操作详解:读取,过滤以及数据绑定
    为listbox的SelectedItem加入翻转动画(附源码)
    [翻译]WP 平衡球游戏开发教程(二) 在XNA 渲染Farseer物理对象
    wp7创建动画闪屏,启动画面所有知识深入详解(附源码)
    [翻译] wp7游戏 源码加分析
    Wp7 list中列表项多样化的解决方案CustomDataTemplateSelector(附源码)
    [翻译]WP 平衡球游戏开发教程(四) 深入了解windowsphone7 游戏底层原理
    [翻译]WP 平衡球游戏开发教程(三) DebugDraw(XNA渲染)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469909.html
Copyright © 2011-2022 走看看