【C语言】以深厚地基筑伟岸高楼-基础篇(十)

C语言

C是有类型的语言,C语言的变量必须在使用前定义,并且需要确定类型。
对于我们之前所有写过的程序来讲,都是先定义一个什么类型变量,然后再使用他

  • c语言以后的语言向两个方向发展:
  • C++/Java更强调类型,对类型的检查更加严格
  • JavaScript,Python,PHP不看重类型,甚至不需要在使用前事先进行定义

类型安全(两种观点)

  • 支持强类型的观点认为明确的类型有助于尽早的发现程序中的简单错误
  • 反对强类型的观点认为过于强调类型迫使程序员面对底层,实现而非失误逻辑
  • 总的来说,早期语言强调类型,面向底层的语言强调类型
  • C语言需要类型,但是对类型的安全检查并不足够,C语言并不是一个非常强的强类型语言,但是它又是一个类型语言

C语言的类型

  • 整数
  • char, short, int, long, long long(C99类型)
  • 浮点数
  • float, double, long double(C99类型)
  • 逻辑
  • bool(C99类型)
  • 指针
  • 自定义类型

类型的不同

  • 类型名称:int, long, double
  • 输入输出时候的格式化:%d, %ld, %lf
  • 所表达的数的范围:shar < short < int < float < double
  • 内存中所占据的大小:1个字节到16个字节
  • 内存中的表达形式: 二进制数(补码), 编码

sizeof

sizeof:

  • sizeof 是一个运算符,给出某个类型或者变量在内存中所占据的字节数。
  • siezof 是静态运算符,它的结果在编译时刻就决定了。
  • 不要在 siezof 的括号里做运算,这些运算都是不会被进行的。
    举例运用:
    sizeof(int)
    sizeof(x)
    sizeof(short)
    sizeof(long)
    等等

整数类型

让我们来通过siezof来试试整数类型在内存中所占据的字节数。
实际运用代码如下:

#include <stdio.h>
int main()
{
	printf("sizeof(char)=%d\n", sizeof(char));//占计算机1字节,8bit(位) 
	printf("sizeof(short)=%d\n", sizeof(short));//2
	printf("sizeof(int)=%d\n", sizeof(int));//4
	printf("sizeof(long)=%d\n", sizeof(long));//4
	printf("sizeof(long long)=%d\n", sizeof(long long));//8
	
	char c = 255;
	int i = 255;
	printf("c=%d,i=%d", c , i);
	//char c : 11111111    实际表-1,此时被当作补码表示了 
	//int i :00000000 00000000 00000000 11111111 实际表255
	unsigned char b =255;//无符号整型,表示范围从-128~127变成0~255 
	printf("unsigned char b=%d",b);
	return 0; 
}
  • 这个代码的运行结果如下:
    sizeof(char)=1
    sizeof(short)=2
    sizeof(int)=4
    sizeof(long)=4
    sizeof(long long)=8
    c=-1,i=255unsigned char b=255

整数

  • char :1个字节(8比特)
  • short : 2个字节
  • int : 取决于编译器(CPU), 通常的意义是“ 1个字节 ”
  • long : 取决于编译器(CPU), 通常的意义是“ 1个字节 ”
  • long long : 8个字节

整数的内存表达

  • 计算机内部一切都是二进制
  • 18 ——> 00010010
  • 0 ——> 00000000
  • -18——> ?

如何表示负数

  • 十进制用“ - ”来表示负数, 在做计算的时候
    二进制负数
  • 1个字节可以表达的数:
  • 00000000——11111111(0~255)
  • 三种方案:
  1. 仿照十进制, 有一个特殊的标志表示负数
  2. 取中间的数为0 , 如10000000表示0 , 比它小的数是负数,比它大的数是正数
  3. 补码:
    对补码的解释,如何补码?
  • 考虑 -1 , 我们希望-1+1 ——> 0。如何做到呢?
  • 0 ——> 00000000
  • 1 ——> 00000001
  • 11111111 + 00000001 ——> 10000000
  • 因为0-1——> -1,所有, -1=:
  • (1)00000000 - 00000001 ——> 11111111
  • 11111111被当作纯二进制看待时, 时=是255, 被当作补码看待时是-1
  • 同理, 对于-a, 其实补码就是0-a, 实际是2^n -a , n是这种类型的位数
    补码的意义就是拿补码和原码可以加出一个溢出的“ 零 ”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值