c++ 常量/有符号数和无符号数
一、宏定义 #define 和常量 const
1、
const关键字
const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着只读(readonly)。
const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。
1.1
#include <iostream>
using namespace std;
int main()
{
const double pi; //圆周率的值用pi表示
pi=3.14159265;
cout<<"圆周率的近似值是"<<pi<<endl;
return 0;
}

报错,没有初始化。只读。
1.2
#include <iostream>
using namespace std;
int main()
{
const double pi=3.141592; //圆周率的值用pi表示
cout<<"圆周率的近似值是"<<pi<<endl;
return 0;
}

1.3
const关键字应用
- 欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;
- 对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
- 在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值;
- 对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量;
- 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”
2、
宏定义 #define 和常量 const 的区别
类型和安全检查不同
宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;
const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查
编译器处理不同
宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束于编译时期;
const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据
存储方式不同
宏定义是直接替换,不会分配内存,存储与程序的代码段中;
const常量需要进行内存分配,存储与程序的数据段中
2.1

2.2

2.3

二、有符号数和无符号数
1、基本概念
在计算机中,可以区分正负的类型,称为有符类型(signed);无正负的类型(只有正值),称为无符号类型 (unsigned)。数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有有符号类型。 字符类型也分为有符和无符类型。 比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。
1.1 原码

可以看到 +5 和 -5 的原码除了最高位不一样外,其他都一样。正数最高位为0,负数最高位为1。
1.2 反码
反码: 正数的反码为原码,负数的反码是原码符号位外按位取反。

可以知道: +5的反码是:00000000 00000000 00000000 00000101
-5的反码是:11111111 11111111 11111111 11111010
1.3 补码
正数补码等于原码,也就是正数原码、反码、补码都一样。
负数:反码加1称为补码。


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

2.2
上面 j 是无符号数,所以就是显示的 50000。
接下来我们算下-15536是怎么来的。

(1)
50000 在电脑中存的就是上面的二进制数: 1100 0011 0101 0000 。并且是以补码的形式存的。
当表示无符号数时,补码和原码时一样的,所以原码依旧是:1100 0011 0101 0000。对应的数就是 50000,就是程序中展示的 50000。
(2)
当表示有符号数时,补码的最高位1 表示是负数,然后我们通过补码—>反码—>原码,来计算i的值。
1100 0011 0101 0000 -1=1100 0011 0100 1111 反码(最高位不变,其他位借位减)
1011 1100 1011 0000 原码(最高位代表负数)
经过如下的变化,就得出了 -15536 的值。

c++ 常量/有符号数和无符号数的更多相关文章
- C语言基础(5)-有符号数、无符号数、printf、大小端对齐
1.有符号数和无符号数 有符号数就是最高位为符号位,0代表正数,1代表负数 无符号数最高位不是符号位,而就是数的一部分而已. 1011 1111 0000 1111 1111 0000 1011 10 ...
- 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字
上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...
- C语言中 有符号数、无符号数、整数溢出 (转)
#include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } ...
- 有符号数和无符号数------c++程序设计原理与实践(进阶篇)
有符号数与无符号数的程序设计原则: 当需要表示数值时,使用有符号数(如 int). 当需要表示位集合时,使用无符号数(如unsigned int). 有符号数和无符号数混合运算有可能会带来灾难性的后果 ...
- java 理解有符号数和无符号数
转至:http://jinguo.iteye.com/blog/212049 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用“ ...
- 关于有符号数和无符号数的转换 - C/C++
转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题, ...
- Mysql中有符号数和无符号数的区别
1原文地址:https://blog.csdn.net/s78365126/article/details/85048882 2可以手写sql验证一下 3mysql无符号和有符号的区别无符号unsig ...
- Qt之C语言有符号数与无符号数运算
以32位的stm32f4为例: 1. uint32_t t_int_k = 239773, t_int_km1 = 4294859707; 则t_int_k - t_int_km1 > 0; ...
- C语言迷题:有符号数与无符号数的问题(转)
https://my.oschina.net/kelvinfang/blog/134725
随机推荐
- 小程序自定义switch组件
如上图,小程序api中的switch组件只能自定义颜色,不能自定义宽高,所以就开始了自己写switch组件. 自定义组件样式 switch组件样式大致如图,样式思路:未选中时为一个长方形有圆角按钮,和 ...
- 【01】openLayers 第一个地图
效果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- Linux监控系统相关资源和运行状态命令整理
#前言:Linux系统自带了些实时查看监控系统运行状态的相关命令,接下来我们就来了解一下. #首先我们先来了解一下什么是进程 #进程:是Linux用来表示正在运行的程序的一种抽象概念,Linux系统上 ...
- Go语言转义字符
\a 匹配响铃符 (相当于 \x07) 注意:正则表达式中不能使用 \b 匹配退格符,因为 \b 被用来匹配单词边界, 可以使用 \x08 表示退格符. \f 匹配换页符 (相当于 \x0C) \t ...
- 爬虫过程中获取不到列表页的url
例1: 采集某网站的时候根据网页页面显示的url链接提取的, 最后始终没有数据返回. 主要原因是页面源码中标签的 href 属性值和页面上的不一样. 页面上显示是‘http://www.xxx.org ...
- Spring Ioc 依赖查找
Spring ioc 有依赖查找和依赖注入,之前不太明白依赖查找是什么意思,翻了一大堆博客看了好多定义也不太清楚 ,后来看了小马哥视频,他通过代码演示,清楚地讲解了什么是 依赖查找以及几种依赖查找的方 ...
- c js 字符串反转
1.例如:输入 i am a student 输出 student a am i #include <stdio.h> #include <string.h> v ...
- vue项目 github 上传项目并链接地址
git init git init: 通过命令git init把这个文件夹变成Git可管理的仓库git status git status:查看当前仓库状态 git add . 这里提示你虽然把项目粘 ...
- 人见人爱A-B 题解
参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算.(当然,大家都知道集合的定义,就是 ...
- (转)协议森林07 傀儡 (UDP协议)
协议森林07 傀儡 (UDP协议) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经讲解了物理层.连接层和网络层.最开始的 ...