整型概述:有符号数与无符号数

66 篇文章 0 订阅
51 篇文章 0 订阅

 整数

C语言标准定义了每种数据类型必须能够表示的最小的取值范围,C和C++都支持有符号(默认)和无符号数。Java只支持有符号数。

 

w位所能表示的值的范围。最小值是用位向量[00・・・0]表示,也就是整数值 0,而最大值是用位向量[11…1]表示。无符号数的二进制表示有一个很重要的属性,就是每个介于0〜2w-1之间的数都有唯一一 个w位的值编码。

补码编码:

符号位被设置为1时,表示值为负,而当设置为0时,值为非负。同无符号表示一样,在可表示的取值范围内的每个数字 都有一个唯一的w位的补码编码。补码的范围是不对称 的:|TMin|=\TMax\ + l, TMin没有与之对应的正数。因为一半的位模式(符号位设置为1的数)表示负数,而一半的数(符号位设置为0的数)表示负数,因为0是非负数,也就意味着能表示的正数比负数少一个。

C语言标准并没有要求用补码形式来表示有符号整数,但是几乎所有的机器都是这么做的。

C库中的文件<limits.h>定义了一组常量,来限定编译器运行的这台机器的不同整型数据类型的取值范围。定义了常量INT_MAX、INT_MIN和UINT_MAX, 对于一个补码的机器,数据类型int有w位,这些常量就对应于TMaxw、TMinw和UMaxw的值。

ISO C99标准在文件stdint・h中定义了一组数据类型, 它们的声明形如intN_t和uintN_t,指定的是N位有符号和无符号整数。N的具体值与实现相关,但是大多数编译器允许的值为8、16、32和64。因此,通过将它的类型声明为uintl6_t, 我们可以无歧义地声明一个16位无符号变量,而如果声明为int32_t,就是一个32位有符号变量。

在Java中,单字节数据类型称为byte,而不是char,而且没有 long long数据类型。

 

反码编码:

原码编码:最高有效位是符号位,用来确定剩下的位应该取负权还是正权,

 

反码和原码对于数字0有两种不同的编码方式,其中把[00-0]都解释为+0。而值-0在原码中表示为[10-0],在反码中表示为[11-1]。

练习题:

答案:

十六进制

二进制

无符号

补码

0xE

1110

14

-2

0x0

0000

0

0

0x5

0101

5

5

0x8

1000

8

-8

0xD

1101

13

-3

0xF

1111

15

-1

 

 

答案:

A

B

C

D

E

F

G

H

I

J

0x1b8

0x14

0xfffffe58

0xfffffe74

0x44

0xfffffec8

0x10

0xc

0xfffffeec

0x20

440

20

-424

-396

68

-312

16

12

-276

32

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值