用c语言找出8个无符号数的最小值,C语言中的有符号数与无符号数

1.  C语言支持所有整型数据类型的有符号和无符号运算,尽管C语言标准并没有指定用哪种方式来表示有符号整数,但是几乎所有的     机器都使用补码。

2.  C语言中默认的整形数据是有符号的,并且允许无符号数和有符号数之间进行转换。转换的原则是底层的位保持不变。

3.  执行运算时,如果一个运算数是有符号的而另一个是无符号的,那么

C

语言会隐式的将有符号参数强制类型转换为无符号数,并假     设这两个数都是非负的。

4.  无符号数的编码

假设一个整数数据类型有w位。我们可以用x来表示整个向量。我们用一个函数

5658c08ecdf7853a0aa8c7f9cf7aa5c3.png

考虑32位所能表示的值得范围。

最小值为用位向量[00000000000000000000000000000000]表示,也就是整数值0;

最大值为用位向量[11111111111111111111111111111111]表示,也就是整数值 (2^32)-1=4294967295。

5.  有符号数编码

最常见的有符号数的计算机表示方式就是补码形式。

在补码的定义中,将字的最高有效位解释为负权。用函数

97cd2c60c02ef3f3fedeb0abc1e93242.png

同样考虑32位补码所能表示的值得范围。

能表示的最小值的位向量[10000000000000000000000000000000],其整数值为 -2^31= -2147483648

能表示的最大值的位向量[01111111111111111111111111111111],其整数值为 (2^31)-1= 2147483647

6.  有符号数的其他表示方法

反码:

dcecce123e987a0c31a066d8f7524d31.png

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

60774d298604c33e6c2385462f75eef8.png

术语补码源于这样一种情况,对于非负数x,我们用(2^w)-x(这里只有一个2)来计算 -x 的w位表示。

术语反码来源于这样一个属性,我们用[1111…1]-x来计算 -x 的反码表示。

重要的数字

字长

8

16

32

64

UMax

255

0x FF

65535

0x FFFF

4294967295

0x FFFFFFFF

18446744073709551615

0x FFFFFFFFFFFFFFFF

TMin

-128

0x 80

-32768

0x 8000

-2147483648

0x 80000000

-9223372036854775808

0x 8000000000000000

TMax

127

0x 7F

32767

0x 7FFF

2147483647

0x 7FFFFFFF

9223372036854775807

0x 7FFFFFFFFFFFFFFF

-1

0x FF

0x FFFF

0x FFFFFFFF

0x FFFFFFFFFFFFFFFF

0

0x 00

0x 0000

0x 00000000

0x 0000000000000000

C语言中数字数据类型的字节数

C声明

32位机器

64位机器

char

1

1

short int

2

2

int

4

4

long int

4

8

long long int

8

8

char *

4

8

float

4

4

double

8

8

32位机器上C语言的整形数据类型的典型取值范围(方括号中的文字是可选的)

C数据类型

最小值

最大值

char

-128

127

unsigned char

0

255

short [int]

-32768

32767

unsigned short [int]

0

65535

int

-2147483648

2147483647

unsigned [int]

0

4294967295

long [int]

-2147483648

2147483647

unsigned long [int]

0

4294967295

long long [int]

-9223372036854775808

9223372036854775807

unsigned long long [int]

0

18446744073709551615

64位机器上C语言的整形数据类型的典型取值范围(方括号中的文字是可选的)

C数据类型

最小值

最大值

char

-128

127

unsigned char

0

255

short [int]

-32768

32767

unsigned short [int]

0

65535

int

-2147483648

2147483647

unsigned [int]

0

4294967295

long [int]

-9223372036854775808

9223372036854775807

unsigned long [int]

0

18446744073709551615

long long [int]

-9223372036854775808

9223372036854775807

unsigned long long [int]

0

18446744073709551615

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值