(二十六)符号类型

简介:

比如有一个short a; 我们有时候会给前面加上一个unsigned ,就变成了unsigned short a;

这个时候呢,因为short是16位,16位能表示出65536种数字。如果是short a;他的范围就是-32768 ~ +32767。加上signed也是一样的,如果加上unsigned呢,他的范围就变成了0 ~ 65535 了。

ps:unsigned 本身是 unsigned int 的缩写。

例如short a;  这里a的范围是-32768 ~ +32767

而unsigned b; 这里b的范围是0 ~ +65535

用一个表格来说明:

short a(以下是a的取值)

a-1

a+1

0

-1

1

-32768

32767

-32767

32767

32766

-32768

a的取值范围

-32768 ~ +32767

 

unsigned b(以下是b的取值)

b-1

b+1

0

65535

1

1

0

2

65535

65534

0

b的取值范围

0 ~ 65535

 

上代码,注释有解释:


#include <iostream>
#define ZERO 0	//make ZERO symbol for 0 value 。定义ZERO为0??(是这样么?)
#include <climits> //define INT_MAX as largest int value .规定INT_MAX 成为int的最大值

int main()
{
	using namespace std;
	short sam = SHRT_MAX; //initialize a varible to max value 。初始化一个变量,让他是最大值。这里初始化sam(后面代表Sam的金钱)是16位字符能表现的最大数字。
						//因为short(非无符号类型)的范围是-32768~+32767之间,因此他的最大值是32767.
	unsigned short sue = sam; //okay if varible sam already defined。 这里将sam的值赋值给sue(后面代表Sue的金钱)是无符号类型的short(其取值范围是0~65535)。
						//而sam的值32768在unsigned short范围内,因此sam和sue都是32767

	cout << "Sam has " << sam << " dollars and Sue has " << sue; //因为上文,所以两个值都是32767
	cout << " dollars deposited." << endl	//换行
		<< "Add $1 to each accout." << endl << "Now";	//告诉你,两个都要加1了

	sam = sam + 1;	//注意这里,因为sam是short的最大值,他加1所以就超过了short的取值范围。
	sue = sue + 1;	//由于sue尚不是unsigned的最大值,所以+1仅仅只是数字加1罢了。
	cout <<"Sam has "<<sam << " dollars and Sue has " << sue;	//sam因为超出了范围,所以自动循环到其取值范围的最小,即-32768。而sue正常,所以为+32768.
	cout << " dollars deposited.\nPoor Sam!" << endl;	//这一段结束了,再次换行。

	sam = ZERO;		//上面的#define ZERO 0应该是定义ZERO为数值0的意思吧?所以sam和sue都等于0了
	sue = ZERO;		//如上
	cout << "Sam has " << sam << " dollars and Sue has " << sue;	//显示出 sam和sue都是0。需要注意的是,sam的最小值不是0,而sue的最小值是0
	cout << " dollars deposited." << endl;
	cout << "Take $1 from each account." << endl << "Now ";	//本段结束,告诉你,下一段,sam和sue都将减一


	sam = sam - 1;	//sam和sue分别减一
	sue = sue - 1;
	cout << "Sam has " << sam << " dollars and Sue has " << sue;	//由于sam的最小值不是0,因此-1后是-1.而sue的最小值是0,-1后循环到最大值,即65535
	cout << " dollars deposited." << endl << "Luck Sue!" << endl;
	system("pause");
	return 0;

}


目录
相关文章
|
2月前
|
JavaScript
typeScript基础(2)_any任意值类型和类型推论
本文介绍了TypeScript中的`any`任意值类型,它可以赋值为其他任何类型。同时,文章还解释了TypeScript中的类型推论机制,即在没有明确指定类型时,TypeScript如何根据变量的初始赋值来推断其类型。如果变量初始化时未指定类型,将被推断为`any`类型,从而允许赋予任何类型的值。
55 4
|
3月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(下)
02 Java基础语法(变量+数据类型+运算符)
26 5
|
6月前
|
算法 编译器 C语言
【C++ 函数 基本教程 第六篇 】深度解析C++函数符号:GCC与VS的名称修饰揭秘
【C++ 函数 基本教程 第六篇 】深度解析C++函数符号:GCC与VS的名称修饰揭秘
232 1
|
6月前
|
编译器 数据安全/隐私保护 C++
C++系列十六:枚举
C++系列十六:枚举
|
机器学习/深度学习 Cloud Native Go
779. 第K个语法符号:简单模拟
这是 力扣上的 779. 第K个语法符号,难度为 中等。
|
编译器 C++
c++中基本类型详细解释外加基本运算规则
类型 含义 wchat_t 宽字符 bool 布尔类型 char 字符 chat16_t unicode字符 chat_32 unicode字符 short 短整型 int 整形 long 长整型 longlong 长整型 float 单精度浮点型 double 双精度浮点型 longdouble 扩展精度浮点型
116 1
|
安全 JavaScript
学习TypeScrip2(任意类型)
TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown
86 0
|
存储 索引 Python
【Python零基础入门篇 · 3】:掌握数值类型、进制的转换、字符串、占位符和格式化输入输出、标识符和保留字
【Python零基础入门篇 · 3】:掌握数值类型、进制的转换、字符串、占位符和格式化输入输出、标识符和保留字
146 0
【Python零基础入门篇 · 3】:掌握数值类型、进制的转换、字符串、占位符和格式化输入输出、标识符和保留字
|
存储 Java
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(一)
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(一)
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(一)
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(四)
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(四)
106 0
【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出(四)