深入理解计算机系统——信息的表示与处理(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、系统编程的时候还是有它的作用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值