(二十六)符号类型

比如有一个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;

}
时间: 2024-10-28 11:14:44

(二十六)符号类型的相关文章

二十六步获得网站流量

原文标题:The A to Z Guide to Getting Website Traffic 原文作者:Shawn Campbell 原文地址:http://www.sitepronews.com/archives/2006/apr/12.html 这是孙波翻译的一篇文章,主要讲的是英文网站开发的文章,大部分内容对于中文内容的网站也有指导意义,供参考.转载本文请保留原文出处和作者以及翻译作者信息.以下是译文. 二十六步获得网站流量 1999年9月的时候,Brett Tabke在Webmast

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十六)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十六)通用型角色头像面板 目前游戏的开发进度已经基本实现了精灵对象之间的普通交互,接下来我们需要朝着实现战斗系统的目标前行.而实现它的前提是必须完善精灵控件的基本属性,如添加生命值.魔法值.活力值.经验值等基本属性并通过窗体界面进行完美体现,本节我将为大家讲解上述内容的具体实现. 既然是为精灵添加属性,大家首先想到的当然是为精灵控件加入属性值索引器: /// <summary> /// 生命值,[0]-当前

Bootstrap &lt;基础二十六&gt;进度条

原文:Bootstrap <基础二十六>进度条 Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性,Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 &l

微信小程序把玩(二十六)navigator组件

原文:微信小程序把玩(二十六)navigator组件 navigator跳转分为两个状态一种是关闭当前页面一种是不关闭当前页面.用redirect属性指定. 主要属性: wxml <navigator url="../index/index">点击跳转不关闭当前页面</navigator> <navigator url="../logs/logs" redirect="true" >点击跳转关闭当前页面<

JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片

JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义readLine就是一种装饰模式 当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,并且提供加强功能,那么自定义的该类就称为装饰类 package com.lgl.hellojava; public class HelloJJAVA { public static void main(S

《CIO故事》连载之二十六 以退为进

整个仓库里没有一个人,死一般地沉寂,空气中散发着一股难闻的气味,机油味掺杂着霉味.这味道让CIO老胡不禁皱了皱眉. "就这样瘫痪了很长时间了."陪同老胡的老刘介绍道.他是这家物流中心的元老,已经在此工作了近30 年,对于物流中心变成这副惨状,他已经屡次向老胡表示过痛心了. 来之前,老胡做了充分的精神准备.近期,http://www.aliyun.com/zixun/aggregation/17542.html">公司资本整合动作频频,除了出售部分业务之外,还购并了一些资

CYQ.Data 轻量数据层之路 使用篇-MAction 增删改 视频[高清无码带音乐-千王之王] G (二十六)

说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇四曲 MAction 增删改(十五)  的附加视频教程. 本次视频介绍了MAction对表的操作: 1:如何添加数据. 2:如何删除数据 3:如何更新数据.   这本次录制的视频上传于-秋色园: 注意如果要看清晰版本,要点击视频下面的:查看原始大小的动画 本次视频大小分辨率为:1024*768,依旧坚持走高清.无码的路线,为观众提供良好视觉享受. 同样:如果直接下载观看时最好设置好宽和高,不然清晰度就没保证了.   swf文件

[算法系列之二十六]字符串匹配之KMP算法

一 简介 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的. 二 基于部分匹配表的KMP算法 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含搜索串"ABCDABD"? 步骤1:字符串"BBC ABC

WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]

元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框架体系中,元数据的导出工作由MetadataExporter实现.MetadataExporter是一个抽象类型,定义了导出元数据的基本行为.WCF定义一个具体的MetadataExporter:WsdlExporter,将基于某个终结点的元数据导出生成基于WSDL的MetadataSet.我们先来认识MetadataExporter和MetadataSet. 一.MetadataEx