2.C++基本数据类型、类型修饰符、变量和常量、#define宏和const关键字

基本数据类型

七种基本的 C++ 数据类型:
在这里插入图片描述
注:
其实 wchar_t 是这样来的:typedef short int wchar_t;所以 wchar_t 实际上的空间是和 short int 一样。

类型修饰符

signed
unsigned
short
long
一些基本类型可以使用一个或多个类型修饰符进行修饰。C++允许在Char int double 前放置类型修饰符。

修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int。

省略int:C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int,只写单词 unsigned、short 或 unsigned、long,int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。

unsigned x;
unsigned int y;

在这里插入图片描述
char 1
int 4
float 4
double 8
有无signed不改变字节数,但是影响取值范围unsigned只能非负,signed可以负数。
short把4变成2
long把4变8

下面着重探讨一下类型修饰符的符号:

在这里插入图片描述
先说一下计算机存储数字的问题:(最主要的问题就是几种码对负数表示不同)
原码:正数不变,负数最高位变1(导致0具有二义性)
反码:正数反码和原码一样,负数反码符号位与原码一致,其余位取反。
补码(计算机以补码形式存储):正数原码反码补码一致,负数补码=反码最末位+1

为了理解 C++ 解释有符号整数和无符号整数修饰符之间的差别,我们来运行一下下面这个短程序:

 #include <iostream>
using namespace std;
 
/*
 * 这个程序演示了有符号整数和无符号整数之间的差别
*/
int main()
{
   
   short int i;           // 有符号短整数
   short unsigned int j;  // 无符号短整数
 
   j = 50000;
 
   i = j;
   cout << i << " " << j;
 
   return 0;
}

在这里插入图片描述
发现输出的有符号短整型i变成了-15536,这是怎么来的?
1)50000的二进制数为1100 0011 0101 0000,以补码形式存在(注意这里为什么要用短整型来验证而不是用整形,短整型刚刚号两个字节,50000的最高位刚好为1,最高位会变化,而整型4个字节就不会输出i为负数,可以自己试一下)
2)首先看j,j作为无符号数正数,所以补码转化成原码不变,数值还是50000
3)那i呢?对于一个有符号的数,其最高位(加粗位)为1表示负数,我们得按照
补码—》反码——》原码 的顺序反推。
所以负数补码1100 0011 0101 0000减

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值