做网站 客户大概会有那些问题,建设企业网站内容,网络营销策略优化,网站换服务器有影响吗控制台输出中文乱码问题解决#xff1a; ref:https://blog.csdn.net/ymzhu385/article/details/121797080
基本数据类型
我们的程序离不开数据#xff0c;比如我们需要保存一个数字或是字母#xff0c;这时候这些东西就是作为数据进行保存#xff0c;不过不同的数据他们的…控制台输出中文乱码问题解决 ref:https://blog.csdn.net/ymzhu385/article/details/121797080
基本数据类型
我们的程序离不开数据比如我们需要保存一个数字或是字母这时候这些东西就是作为数据进行保存不过不同的数据他们的类型可能不同比如1就是一个整数0.5就是一个小数A就是一个字符C语言提供了多种数据类型供我们使用我们就可以很轻松的使用这些数据了。
不同的数据类型占据的空间也会不同这里我们需要先提一个概念就是字、字节是什么
我们知道计算机底层实际上只有0和1能够表示这时如果我们要存储一个数据比如十进制的3那么就需要使用2个二进制位来保存二进制格式为11占用两个位置再比如我们要表示十进制的15这时转换为二进制就是1111占用四个位置4个bit位来保存。一般占用8个bit位表示一个字节B2个字节等于1个字所以一个字表示16个bit位它们是计量单位。
我们常说的内存大小1G、2G等实际上就是按照下面的进制进行计算的
8 bit 1 B 1024 B 1KB1024 KB 1 MB1024 MB 1GB1024 GB 1TB1024TB 1PB基本上是1024一个大进位但是有些硬盘生产厂商是按照1000来计算的所以我们买电脑的硬盘容量可能是512G的但是实际容量可能会缩水
在不同位数的系统下基本数据类型的大小可能会不同因为现在主流已经是64位系统本教程统一按照64位系统进行讲解。
原码、反码和补码
原码 上面我们说了实际上所有的数字都是使用0和1这样的二进制数来进行表示的但是这样仅仅只能保存正数那么负数怎么办呢
比如现在一共有4个bit位来保存我们的数据为了表示正负我们可以让第一个bit位专门来保存符号这样我们这4个bit位能够表示的数据范围就是
最小1111 - (22212^0) -7 最大0111 (22212^0) 7 7 虽然原码表示简单但是原码在做加减法的时候很麻烦以4bit位为例
1(-1) 0001 1001 怎么让计算机去计算虽然我们知道该去怎么算但是计算机不知道计算机顶多知道11需要进位
我们得创造一种更好的表示方式于是我们引入了反码
反码 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变其余各个位取反 经过上面的定义我们再来进行加减法
1(-1) 0001 1110 1111 -0 直接相加这样就简单多了
思考1111代表-00000代表0在我们实数的范围内0有正负之分吗
0既不是正数也不是负数那么显然这样的表示依然不够合理
补码 根据上面的问题我们引入了最终的解决方案那就是补码定义如下
正数的补码就是其本身 不变 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后1. (即在反码的基础上1) 其实现在就已经能够想通了-0其实已经被消除了我们再来看上面的运算
1(-1) 0001 1111 (1)0000 0 现在无论你怎么算也不会有-0了
所以现在4bit位能够表示的范围是-8~7C使用的就是补码 char c1 127; //已经到达c的最大值了c1 c1 1; //我不管我就要再加printf(%d, c1); //这时会得到什么结果输出-128
怎么127加上1还变成-128了呢这是由于位数不够导致运算结果值溢出
127 1 01111111 1 由于现在是二进制满2进1所以最后变成 10000000 补码形式的 -128 负数求补码如果补码的符号位为“1”表示是一个负数求原码的操作可以是符号位为1其余各位取反然后再整个数加1。 11111111