所有的C语言的书籍里都会告诉你signed char的取值范围为-128 ~ 127,但是从来没有人告诉你为什么会是这样;

我们先来算算,有符号的char占一个字节,最高位表示正负,其余的七位表示数值,七位二进制可以表示128个数(2^7 = 128),即0~127;加上符号位后,就变成了-127 ~ -0,0 ~127,这时,就会出现‘-0’这样一朵奇葩;

我对网上关于-0和-128原码相同的这种说法表示很无语;

我们知道,计算机是以补码的形式存数据的;

-0和-128在计算机中是怎样存的?

所以,-128和-0的原码是不一样的;

但是,我们的char类型是8位,它把-128最高位符号位截掉了,这样-128的原码就变成了1000 0000;

被截短的-128的原码才和-0的原码相等;

既然都说到这里了,终于可以不提‘-0’这个恶心的东西了,今后看到一个有符号的char,它的原码用二进制表示为1000 0000的时候,我们就把它当做-128就可以了(只是看做,-128的原码可不是1000 0000);

下面,我们来看一下这个程序:

它会打印127,为什么?

-129 = -128 -1;因为计算机只会算加法,所以转换成-128 + (-1) 

        -

        -128  原码: 1000 0000

            反码: 0111 1111

            补码: 1000 0000

        -1   原码: 1000 0001

            反码: 1111 1110

            补码: 1111 1111

        -128 + (-1)

            1 0 0 0 0 0 0 0

           + 1 1 1 1 1 1 1 1

            ---------------------------

            1 0 1 1 1 1 1 1 1

因为a是一个char类型的,所以,会打印127,这只是研究阶段,但请不要这样使用!

参考自:http://www.embedu.org/Column/Column771.htm

char类型的取值范围相关推荐

  1. Java基础题37:(单选题)java中char类型的取值范围是() A.0 ... 32767 B.0 ... 65535

    37.(单选题)java中char类型的取值范围是() A.0 - 32767 B.0 - 65535 C.–256 - 255 D.–32768 - 32767 [正确答案]B [答案解析]在jav ...

  2. c语言中char的取值扩大,C语言中 char 类型的取值范围为什么是-128~127

    我们之前已经说过关于原码.反码和补码的一些东西,如果你没有看过,可以点这里< 你知道原码.反码和补码吗,进来了解一下吧 >看一下 . 好了,可能你不会太想看,所以我们一起再来简单的复习一下 ...

  3. 整型的赋值超出该类型的取值范围

    对于unsigned类型来说,编译器必须调整越界值使其满足要求.编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值. 例如:8位的unsigned char,取值范围是0~255,如 ...

  4. 32位机器下面各类型的取值范围(sizeof值)

    32位机器下面各类型的取值范围(sizeof值)   32位机器下面的结果: 数据类型 说明 字节数 取值范围 bool 布尔型 1 true,false char 字符型 1 -128-127 un ...

  5. 类型的取值范围_Java基础类型取值范围,从基础的理解加深记忆

    Java有8种基础类型,但是你可能常常会忘记他们的取值范围.而这主要是由于你再依靠默记这些类型的取值范围,而不是从根本上理解. 举例 byte占1个字节,8给比特位,它的取值范围是:-128 ~ 12 ...

  6. C语言中不同类型的取值范围

    C语言中的不同类型的取值范围 前言 C语言中,我们知道最基本的数据类型有int整型,float和double浮点型,char字符型,在计算机里,他们的取值并不是任意和无限的,都有相应的取值范围,那么计 ...

  7. int 类型的取值范围

    大伙都知道int类型的 取值范围是 -2147483648 到 2147483647         那为什么不是                              -2147483647 到 ...

  8. *floa类型和long类型那个取值范围更大?

    *floa类型和long类型那个取值范围更大? 作为基础知识.我们都知道float在内存中占用4个字节的空间,而long型占用8个字节的空间. 但float的取值范围是-3.403E38-3.403E ...

  9. js Date 类型 的取值、计算、格式化 与 moment.js

    js Date 类型 的取值.计算.格式化 与 moment.js 前言 笔者工作多年,作为一个爱思考的程序员,一直在想一个问题:究竟怎样才可以让自己变的更强.. 对不起各位,说的太中二了,让我们重新 ...

最新文章

  1. 2020 中国技术力量年度榜单
  2. python中的带有换行符的字符串在juypter中直接输入、print与写入文件的区别
  3. Python小知识 | 这些技能你不会?(二)
  4. php面向对象之单表操作类
  5. 简单暴力到dp的优化(初级篇)
  6. winform list集合怎么 in过滤_Java List集合遍历数据的八种方式
  7. leetcode python3 简单题53. Maximum Subarray
  8. VB表格控件总览与例程分析
  9. java题目青蛙跳杯子_历届试题 青蛙跳杯子
  10. 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
  11. 如何解决SSM框架前台传参数到后台乱码的问题
  12. 管理感悟:要想到自己脖子后面有灰
  13. lnmp无法删除.user.ini文件的解决办法
  14. DDoS异常流量清洗解决方案
  15. 怎样屏蔽(去掉)csdn博客侧栏广告
  16. 万字长文爆肝呕血整理Python入门到精通,【巨详细,一学就会】
  17. 计算机关机界面卡住,Win7关机缓慢,关机后一直卡在正在关机界面
  18. 基于FPGA数字混频器的设计(1)
  19. qq发文件大小上限_QQ邮箱上传附件一般有限制吗?最大能发送多大的文件
  20. NET Core实战项目之CMS 第九章 设计篇-白话架构设计

热门文章

  1. 关于智能路由器的知识了解
  2. EChat(简易聊天项目)六、实现记住密码和自动登录
  3. oracle的system账户用normal模式登录失败,提示用户名或密码错误,但是如果用sysdba登录,即使不输入密码,或者密码错误也能登录成功。
  4. 【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思
  5. 用mac系统怎么连宽带连接服务器吗,苹果电脑怎么连宽带_MAC系统怎么连接有线宽带-win7之家...
  6. 程序员个人外包合同模板 私活模板
  7. 移动收款功能(未完成,无参考价值)
  8. 单目标应用:蜣螂优化算法求解无人机三维航迹规划,含四种对比算法(提供Matlab代码)
  9. 解决谷歌浏览器,打开开发者工具后,页面突然变成手机模式
  10. 作为QA工程师要避免的7个坏习惯