IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 深入理解计算机系统——信息的表示与处理(2.整数的表示) -> 正文阅读

[C++知识库]深入理解计算机系统——信息的表示与处理(2.整数的表示)

本节描述两种整数的表示方式,一种只能表示非负数(无符号整数),一种都能表示(有符号整数)。

整数类型和表示范围

C数据类型最大值最小值
char-128/SCHAR_MIN127/SCHAR_MAX
unsigned char0/CHAR_MIN255/UCHAR_MAX
short-3276832767
unsigned short065535
int-2^31/INT_MIN2^31-1/INT_MAX
unsigned int02^32-1
long(32位)=int=int
long(64位)-2^632^63-1
unsigned long(32位)=unsigned int=unsigned int
unsigned long(64位)02^64-1
int32_t=int=int
uint32_t=uint=uint
int64_t=long64=long64
uint64_t=ulong64=ulong64

为了保证兼容性,应该减少使用long,而用int32_t等代替。

无符号整数

以char为例子,二进制编码为1001 1101的unsigned char类型数据的大小为:
127+026+…+1*20=157

有符号整数

通常大部分数都默认是有符号数,除在定义的时候加unsigned。
对于数字来说在末尾加u或U也可以表示其为无符号:123u,0xa2U

补码

最常见的有符号表示方式就是补码。设置最高有效位为符号位,0表示整数,1表示负数。
同上一个char的例子,二进制编码为1001 1101的char类型数据的大小为:
-127+026+…+1*20=-99

99的二进制编码为01100011。可以看出从99变成-99,或者从-99变成99,就是二进制编码取反再+1。

无符号和有符号的转换

C语言允许各种不同类型之间的强制转换。

在无符号和有符号的转换时,数据的位(二进制表示)不会变化,只是解释这二进制的方式变了。
如signed char a = -1;其二进制表示为:1111 1111
将其转换unsigned char b = a;其二进制表示不变,但值为255

当有符号和无符号混合运算的时候,C会将有符号隐式转为无符号数和无符号数就行运算。这在算数运算的时候可能没什么问题,但是在大小于这样的运算会出现问题。

扩展数字的位表示

例如将short类型的数据变成int类型
无符号数:在前面补0
有符号数:在前面补最高位的值

当把short转为unsigned int时,会先改变大小(把short转为int),再改变符号(把int变成unsigned int)

截断数字

例如把int变成short。
书上讲了一大堆,我觉得就是把高位的丢掉。

建议

有符号和无符号的数据表示范围不同,在使用和运算的过程中总是不小心就有隐式转换的发生,造成一些细节的错误。
书上建议在编程的时候别用无符号数。
但是在一些特定的场合如bitmap、系统编程的时候还是有它的作用的。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:24:29  更:2022-04-26 11:27:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:16:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码