char类型的取值范围
所有的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类型的取值范围相关推荐
- 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 ...
- c语言中char的取值扩大,C语言中 char 类型的取值范围为什么是-128~127
我们之前已经说过关于原码.反码和补码的一些东西,如果你没有看过,可以点这里< 你知道原码.反码和补码吗,进来了解一下吧 >看一下 . 好了,可能你不会太想看,所以我们一起再来简单的复习一下 ...
- 整型的赋值超出该类型的取值范围
对于unsigned类型来说,编译器必须调整越界值使其满足要求.编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值. 例如:8位的unsigned char,取值范围是0~255,如 ...
- 32位机器下面各类型的取值范围(sizeof值)
32位机器下面各类型的取值范围(sizeof值) 32位机器下面的结果: 数据类型 说明 字节数 取值范围 bool 布尔型 1 true,false char 字符型 1 -128-127 un ...
- 类型的取值范围_Java基础类型取值范围,从基础的理解加深记忆
Java有8种基础类型,但是你可能常常会忘记他们的取值范围.而这主要是由于你再依靠默记这些类型的取值范围,而不是从根本上理解. 举例 byte占1个字节,8给比特位,它的取值范围是:-128 ~ 12 ...
- C语言中不同类型的取值范围
C语言中的不同类型的取值范围 前言 C语言中,我们知道最基本的数据类型有int整型,float和double浮点型,char字符型,在计算机里,他们的取值并不是任意和无限的,都有相应的取值范围,那么计 ...
- int 类型的取值范围
大伙都知道int类型的 取值范围是 -2147483648 到 2147483647 那为什么不是 -2147483647 到 ...
- *floa类型和long类型那个取值范围更大?
*floa类型和long类型那个取值范围更大? 作为基础知识.我们都知道float在内存中占用4个字节的空间,而long型占用8个字节的空间. 但float的取值范围是-3.403E38-3.403E ...
- js Date 类型 的取值、计算、格式化 与 moment.js
js Date 类型 的取值.计算.格式化 与 moment.js 前言 笔者工作多年,作为一个爱思考的程序员,一直在想一个问题:究竟怎样才可以让自己变的更强.. 对不起各位,说的太中二了,让我们重新 ...
最新文章
- 2020 中国技术力量年度榜单
- python中的带有换行符的字符串在juypter中直接输入、print与写入文件的区别
- Python小知识 | 这些技能你不会?(二)
- php面向对象之单表操作类
- 简单暴力到dp的优化(初级篇)
- winform list集合怎么 in过滤_Java List集合遍历数据的八种方式
- leetcode python3 简单题53. Maximum Subarray
- VB表格控件总览与例程分析
- java题目青蛙跳杯子_历届试题 青蛙跳杯子
- 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
- 如何解决SSM框架前台传参数到后台乱码的问题
- 管理感悟:要想到自己脖子后面有灰
- lnmp无法删除.user.ini文件的解决办法
- DDoS异常流量清洗解决方案
- 怎样屏蔽(去掉)csdn博客侧栏广告
- 万字长文爆肝呕血整理Python入门到精通,【巨详细,一学就会】
- 计算机关机界面卡住,Win7关机缓慢,关机后一直卡在正在关机界面
- 基于FPGA数字混频器的设计(1)
- qq发文件大小上限_QQ邮箱上传附件一般有限制吗?最大能发送多大的文件
- NET Core实战项目之CMS 第九章 设计篇-白话架构设计
热门文章
- 关于智能路由器的知识了解
- EChat(简易聊天项目)六、实现记住密码和自动登录
- oracle的system账户用normal模式登录失败,提示用户名或密码错误,但是如果用sysdba登录,即使不输入密码,或者密码错误也能登录成功。
- 【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思
- 用mac系统怎么连宽带连接服务器吗,苹果电脑怎么连宽带_MAC系统怎么连接有线宽带-win7之家...
- 程序员个人外包合同模板 私活模板
- 移动收款功能(未完成,无参考价值)
- 单目标应用:蜣螂优化算法求解无人机三维航迹规划,含四种对比算法(提供Matlab代码)
- 解决谷歌浏览器,打开开发者工具后,页面突然变成手机模式
- 作为QA工程师要避免的7个坏习惯