C++:数据类型和表达式<1>无符号和有符号整型

对于熟悉的关键字,看到了,第一反应必须快速的给出正解,倘若不能,就说明还不够熟悉。我问自己:数据类型有哪些?似乎一下子说不那么全。习惯性的要列个图,不求多高的要求,起码要和课本上概括的差不多吧。

这里写图片描述

说到数据类型,得记得住这些类型是占多少字节吧,毕竟我们是搞地基的。又可以重温一遍数据类型了,再闭上眼睛回想一下打出来,看看能有多快!!!、
1;int 即signed int. 4个字节
2;unsigned int .4个字节
3;short int . 2个字节
4;unsigned short int . 2个字节
5;long int .4个字节
6;unsigned long int. 4个字节
7;【signed】/【unsigned】 char . 1个字节
8;float . 4个字节
9; double/long double . 8个字节

还想再回顾一遍:
signed int , short int , long int , unsigned int ,unsigned short int, unsigned long int, signed char ,unsigned char,float, double,long double^^


谈下一话题:

一,有符号和无符号的区别!
为什么signed int ,unsigned int , signed char, unsigned char^^
如果是signed有符号的话,那么这个数值就要用补码的形式来存放,在这个存放的单元中,存储单元的最高位(什么代表位?bit比特嘛!)来表示数值的符号。如果是unsigned无符号的话,数值就没有符号,全部二进制位都用来表示这个数值的本身。
再用一句话来概括,无符号和有符号的区别就在于它们在内存中显示的数值的第一位,也就是最高位是当做符号位来用还是当做数字本身来用。这样说太抽象,画个图一目了然。
这里写图片描述

我们来带着问题的来研究这幅图:
1,为什么有16个空格?
首先要知道一个单位,bit比特,这是我们表示信息的最小单位了,它呢,只有两种状态,要么是0,要么是1. 一个字节(byte)是8个比特,即 1 byte = 8 bit.
short int是两个字节,所以也就是16个比特。
(注:
short int在16位机占2个字节,在32位机中占4个字节

2,里面的0和1代表什么意思?
在第一点里面也说了,只有0和1两种状态、计算机的所有数据都是按照二进制进行存储的!那么在16位机中,short int占了两个字节,有16个比特位,就是有16个空格让你填,只能填0或1,会数学的都知道16个空格有多少中组合了吧,2的16次方!为什么是2的16次方,0和1两个数排列组合,不是2难道是3吗!

这里写图片描述


为什么是2的15次方,上面已经说了,最高位是符号位,剩下15位保存数值,为什么最大值2的15次方还要减一?
1+2^1+2^2+…+2^14
=2^15-1
没问题吧!


问题又来了,为什么最小值是-32768,而不是-32767?
计算机用二进制来表示负数时用的是“补码法”,做法就是正数按原码,负数用其相反数的反码加一,有点绕,需要专门写一篇进制转化的文章。
这种结果用-32768代替了“-0”,可以让符号位能与有效值部分一起参加运算,从而简化了运算规则,同时使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
再换种说法,原码中,+0和-0都表示零,补码中,正零还是零,但“负零”用来表示最小值(-32768),暂且把这个当做一种规定。内存中有符号整数是用补码形式储存,如果是用原码形式储存由于0可以表示为 0000 0000 0000 0000[+0] 或者 1000 0000 0000 0000[-0] ,所以只能表示-32767~32767 ,但是如果用补码储存,0[+0或-0]就被唯一确定了是0000 0000 0000 0000 ,多出来的一位用于表示最小整数,即-32768 ,听了可能还是不太明白,等写新的文章时再进行阐述!


那么,**无符号的取值范围是多少呢?**2的16次方减1.也就是65535,能看懂有符号的为什么减一,就能看懂无符号为什么减一,这个二进制的计算方法。因为没符号嘛,所以最小值就是0了,所以无符号的取值范围是0~65535.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值