Loading

C语言中的数据类型及其类型转换

C语言中的整数数据类型

C 语言中的整型数据就是定点整数,根据位数的不同,可分为字符型 (char,8 位)、短整型(short 或 short int,16 位)、整型 (int,32 位)、长整型 (long 或 long int,在32 位机器中为 32位,在 64 位机器中为 64 位)。char 是整型数据中比较特殊的一种,其他如 short/int/long 等不指定signed/unsigned 时都默认是有符号整数,但 char 默认是无符号整数。无符号整数 (unsigned short/int/long)的全部二进制位均为数值位,没有符号位,相当于数的绝对值。signed/unsigned 整型数据都是按补码形式存储的,只是 signed 型的最高位代表符号位,而在unsigned 型中表示数值位,因此这两者所表示的数据范围也有所不同。

类型 大小(字节) 默认有符号/无符号 范围
char 1 无符号 0 到 255
unsigned char 1 无符号 0 到 255
signed char 1 有符号 -128 到 127
short 2 有符号 -32,768 到 32,767
unsigned short 2 无符号 0 到 65,535
int 4 有符号 -2,147,483,648 到 2,147,483,647
unsigned int 4 无符号 0 到 4,294,967,295
long 4/8 有符号 在32位机器中为 -2,147,483,648 到 2,147,483,647,在64位机器中为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long 4/8 无符号 在32位机器中为 0 到 4,294,967,295,在64位机器中为 0 到 18,446,744,073,709,551,615

C语言中的浮点数(IEEE754标准)

img

这里有一个需要特别注意的地方,IEEE754中,尾数个位上的1是隐含的

img

IEEE 的阶码保留了全0和全1来表示特殊的状态,所以阶码最大值的真值为127,对应机器数为1111 1110,阶码最小值的真值为-126,对应的机器数为0000 0001

img

img

强制类型转换

img

关于短变长时候的扩展,无符号数使用零扩展,即在高位补0,而有符号数采用符号扩展,正数在高位补0,负数在高位补1。

若同时有无符号数和有符号数参与运算,C语言标准规定按照无符号数进行运算

算数移位和逻辑移位

img

  • 原码的算数移位
    • 原码在进行算数移位时,符号位不参与运算,只有数值位移动
    • 算数左移时,低位补0,高位舍弃
    • 算数右移时,高位补0,低位舍弃
  • 补码的算数移位
    • 补码在进行算数移位时,符号位也会参与运算
    • 正数在进行算数左移时,低位补0,高位舍弃;算数右移时,高位补0,低位舍弃
    • 负数在进行算数左移时,低位补0,高位舍弃;算数右移时,高位补1,低位舍弃

可以记忆成,左移并不区分算数左移或者逻辑左移,都是高位直接丢弃(包括符号位),低位补0。而算数右移是将低位丢弃,高位补符号位(最高有效位);逻辑右移是低位丢弃,高位补0

posted @ 2024-07-16 20:38  AH20  阅读(64)  评论(0编辑  收藏  举报