有符号数和无符号数

数据类型的最高位用于标识符的符号。
最高位为1代表负数,最高位为0代表正数。
在计算机内部用补码表示有符号数。
正数的补码为本身,负数的补码为负数的绝对值各位取反之后加一。
一个字节是八位  十六进制0x01 二进制也就是0000 0001
八位整数5的补码为 0000 0101
八位整数-7的补码为1111 1001
十六位整数20的补码为 0000 0000 0001 0100
十六位整数-13的补码为 1111 1111 1111 0011

在计算机内部用原码表示无符号数,无符号数默认为正数,无符号数没有符号位。
对于固定长度的无符号数,min-1=max,max+1=min.

在c语言中变量默认为有符号类型,unsigned关键字声明为无符号数。

C语言默认变量为有符号,加上unsigned 就为无符号。只有整数能声明unsigned;关于正数负数在计算机里面有一点,当有符号的数遇见无符号的数会转化无符号数(补码),比如2+-2),-2就会自动转为无符号数,所以结果大于0.这里要说一下要注意无符号数0然后再小就会溢出变成最大值。
当无符号数和有符号数进行运算,有符号数会转化为无符号数,结果还是无符号数。

计算的时候首先看类型转换,然后看是转换为有符号数还是无符号数,最高位代表的不同,然后看输出是有符号输出还是无符号输出。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页