当前位置:首页 > 新闻中心 > 电气版块 > 详细内容
【C语言_小知识】补码
发布时间:2014/6/23  阅读次数:2083  字体大小: 【】 【】【
为什么需要学习补码
计算机中保存数据都是以补码来保存的。

                什么是不够位,也就是你所定义的变量在计算机中所占
                的字节大小,可使用sizeof(数据类型),查看占用字
                节大小,一般int占用4字节,32位


补码
原码
也叫 符号-绝对值码
最高位0表示正 1表示负,其余二进制位是该数字的绝对值的二进制位

原吗简单易懂
加减运算复杂
存在加减乘除四种运算,增加了cpu的复杂度
零的表示不唯一

反码
反码运算不便,也没有在计算机中应用

移码
移码表示数值平移n位,n称为移码量
移码主要用于浮点数的阶码的存储

已知十进制求二进制
正整数转二进制
除2取余,直至商为零,余数倒序排序
注意:正整数的补码,反码,原码都相同!
负整数转二进制
先求与该负数线对应正整数的二进制代码,然后将(除符号位)所有位取反,末尾加1,    不够位数时,左边补1
例:-54D  (int,32bit)
(将10进制转换成二进制最快的方法是,现将十进制转换成16进制;54D/16=0X 36;对应的二进制:0011 0110 )
二进制:1000 0000, 0000 0000, 0000 0000,0011 0110
原码:   1000 0000, 0000 0000, 0000 0000,0011 0110
反码:   1111 1111,    1111  1111,  1111 1111,1100  1001
补码:反码加1
             1111 1111,    1111  1111,  1111 1111,1100  1010
              F         F             F        F           F       F           C         A

程序验证:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
       int i,j;
       i = 0xFFFFFFCA;
        printf("INT在系统中占用%d字节\n",sizeof(i));
       printf("十六进制:%#x",i);
        printf("对应十进制是:%#d",i);
        while(1);
        return 0;
}
 

 

零转二进制
全是零
已知二进制求十进制
如果首位是0,则表明是正整数,按普通方法来求

如果首位是1,则表明是负整数
将所有位取反,末尾加1,所得数字就是该负数的绝对值
如果全是零,则对应的十进制数字就是零

CHAR 类型是1个字节,所能存储的十进制为:+127到-128;
如下图:



如果将 128赋值给char类型,
128为整形常量,是4个字节,32bit
128对应的补码是:0000 0000, 0000 0000, 0000 0000, 1000 0000 
如果将占用4个字节的整形常量赋值给占用1个字节的char,则高3个字节丢失,
保存在char变量里面的值是:1000 0000,
最高位是符号位,对应的十进制是:取反加1
0111,1111+1=1000,000 =128,
符号位是负数,则为-128;
只有知道补码,才知道,这是怎么回事!

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!


惠州市胜克机电设备有限公司 版权所有

 Copyright By www.hzskjd.com