原码,补码,c中各类型表示的范围

3 篇文章 0 订阅
2 篇文章 0 订阅

本文内容只作为借鉴用,如有错误望指出.

相信大家都了解原码和补码的转换关系,若不知道百度一下很多解释的.我主要想阐述下其中在编译器(VC6.0)和内存中得分布情况.

首先计算机所有数字存储都是通过原码的形式,这样只用加法就解决了减法的问题.

在c或者c++下,只以char为例子(其他类型原理相似).char  占用1个字节,范围是[-128,127)  [0,255);

char为什么能表示-128; 这是一种规定将-0  即10000000  表示成-128,  -0在内存中得补码表示就是10000000;所以是[-128,127);

实例:

char x = -127; //在内存中得形式  0xxxxxx     0x81 ;  即位10000001    -127的补码形式,

//在内存中是如此表示的,计算机不知道他到底是有符号还是无符号

//而程序拿过来用时你的类型是否为有符号进行翻译的

//有符号的情况翻译成-127 ,  无符号的话就翻译成129

/

unsigned char x = -127; //无符号的,默认是有符号的.   编译器并不会根据类型你的赋值进行检测, 将-127转换成补码存储到内存中  10000001

printf("%d",x); //输出结果是 129.    这时候编译器会根据x的类型对10000001进行转换,到底是129或者是-127是由你输出的类型而定的


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值