数值字节与范围

字节与范围

字节与范围换算:1个字节8位。如 1000 0000。
计算机中数值一律用二进制数来存储,用最高位表示符号0为正1为负剩下的为数值的二进制值

存储可以加上UNSIGNED取消符号: 如 Tinyint UNSIGNED 。默认情况下都是有符号的。
所以存储范围也分为两类:

  • 无符号 1 1111111(二进制) = 255(十进制)
  • 有符号 1 1111111 (二进制) = -127(十进制)

为什么有符号情况下不是 -127 而是 -128?

因为存在 1000 0000 (-0)与 0000 0000(+0),而0是没有正负的,且会-0会浪费一个二进制表示的位置。
所以人为规定了:1000 0000 为 -128,同理其他位数更高的数据类型也是如此。

补码1000 0000没有对应的原码和反码,它表示-128,这是规定。


数据存储都是采用补码来存储的,什么是原码、反码、补码

1.原码

原码:第一位是符号位,其余为数值。
      -1的原码为 1000 0001

2.反码

反码:正数的反码与其原码相同;
      负数的反码是原码除符号位外,其他位取反。
      -1的反码为 1111 1110

3.补码

补码:正数的补码与其原码相同;
      负数的补码是原码除符号位外,其他位取反,然后加1。即在反码的基础上+1.
      -1的补码为 1111 1111
注:反码1111 1111的补码为0000 0000


为什么要用补码来存储?

对于整数来说,用什么码结果都是一样的。
但对于负数来说,运用补码可以运算时避免符号的干扰把符号位带入进行运算。而且可以直接与无符号数进行运算*。
例如: 2 - 1 = 1          128 - 127 = 1

补码: 0000 0010          1000 0000(无符号)   
    + 1111 1111        + 1000 0001      
-----------------  -----------------
      0000 0001 = 1      0000 0001 = 1
    -127:1111 1111(原) -> 1000 0000(反)-> 1000 0001(补)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值