Day04 C语言基础:常量 字符常量 整数 原码 反码 补码 字符 浮点数 运算符

1.常量

常量就是在程序运行中,不能改变的值。

1.1 整数常量

整数常量可以是十进制、八进制、十六进制的常量,前缀位0x代表十六进制,0代表八进制,不带前缀则表示十进制。

当我们想打印一个常量时候

%d是打印十进制的格式符
%o是打印八进制的格式符
%x是打印16进制的格式符
%c是打印单个字符的格式符
%s是打印字符串的格式符 
%e是打印科学计数法的格式符 

 1.2 字符常量

在代码中用''单引号框起来的常量是字符常量,它存储在char类型的简单变量中。

当我们想输出一个常量时,如果用%d来输出字符常量,则会将字符常量对应的ASCLL码值输出。

a对应的是97,所以会将97输出

那么我们就可以用这个特性进行大小写转换,他们之间ASCLL码值差32,小写转大写就-32,大写转小写就+32

当你想输出字符串的时候,用%s,后面用双引号括起来否则会报错

 字符串还有转义字符

/b的意思是退格,如果前面一个单位有字符,那么就覆盖它再输入后面的内容 

/r 和 /n的区别    /r是回车,他的意思是回到当前行的起始位置,\n是换行的意思 

/t是判定前面的位数,如果不够8位补齐8位,如果刚好8位则补一个8位的空格

\\ \' \" 其实就是再printf函数里将\ ' "打印出来 

\ + 数字  会输出八进制数字 

这里%d是输出一个整型的二进制转十进制的数字,最多只有8位,当超过8位时,高于8位的会被舍弃,最高位为符号位,下来的7位进行补码+1进行输出 

// \ + x + 数字 会输出十六进制的数字

还有一种字符常量,可以在预处理阶段输入

#define + 常量名 + 值

这样就可以在代码中尽情使用这个固定值的量,就不用每次再输入这个数字

我们一般可以设置用处比较多的数,例如π,我们就可以再代码开头加上

#define PI 3.1415926

 在后面需要这个进入运算时,直接写PI就好

2. 整数

整数就是没有小数部分的书,在C语言中,小数点永远不会出现在整数中

常用的整数类型的存储大小和值的范围:

 unsigned 是一个无符号的整型数字

今天在输出无符号整型数字的时候出现了一个问题

我想强行输出一个带符号的无符号的数,就导致输出了一个特别大的数字

那为什么呢?

因为这里会输出32位的二进制数,-5为10...0101,取反+1就变成了11...0011,变成10进制就是一个非常大的数字

还有一个问题

这个代码输出的是-1,按理来说应该是最大的数字,但是,结果却不是这样的

这个超出了一个数字,所以,C语言编译的时候,将最大位变成符号位,剩下的位数取反+1,所以最后输出就是-1

遇到这个问题,就告诉我们,今后要输出的时候,一定要考虑这个数字可不可以输出,要不会出现不可预知的问题。

 3.原码 反码 补码

上面的问题或多或少都提到了原码,反码,补码,那么三个东西是干啥的呢?

一句话其实就是解决负数运算的问题

不过具体的知识我也不知道,我在网上查到的资料,我觉得讲的不错,原文在这https://zhuanlan.zhihu.com/p/371184302

原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值,例如的十进制的的正负1,用8位二进制的原码表示如下:

【+1】= 原:[ 0000 0001 ]

【-1】= 原:[ 1000 0001 ]

反码的表示方法为:

  • 正数的反码是其原码本身。
  • 负数的反码是在其原码的基础上,符号位不变,其余各位取反。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ]

补码的表示方法为:

  • 正数的补码是其原码本身。
  • 负数的补码是在其原码的基础上,符号位不变,其余各位取反后加1(即在反码的基础上加1)。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ] = 补:[ 0000 0001 ]

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ] = 补:[ 1111 1111 ]

 计算机实际只存储补码, 所以原码转换为补码的过程,也可以理解为数据存储到计算机内存中的过程

 在原、反、补码中,正数的表示是一模一样的,而负数的表示是不相同的,所以对于负数的补码来说,我们是不能直接用进制转换将其转换为十进制数值的,因为这样是得不到计算机真正存储的十进制数的,所以应该将其转换为原码后,再将转换得到的原码进行进制转换为十进制数。(机器数包含符号位)

4. 字符

字符我们可以用变量 = getchar()来接收,然后用putchar(变量)来输出

也可以用scanf("%c", &变量),然后用printf来输出

今天我做了一个练习

#include<stdio.h>

int main(){
	printf("请输入你的班级:\n");
	char a;
	char b;
	char c;
	char d;
	char e;
	char f;
	char g;
	scanf("%c%c%c%c%c%c%c", &a, &b, &c, &d, &e, &f, &g);
	printf("你的班级是:%c%c%c%c%c%c%c\n", a, b, c, d, e, f, g);
	
	
	printf("请输入你的姓名:\n");
	char h;
	char i;
	char j;
	char k;
	
	scanf("%c%c%c%c", &h, &i, &j, &k);
	printf("你的姓名是:%c%c%c%c\n", h, i, j, k);
	
	printf("请输入你的手机号:\n");
	char l;
	char m;
	char n;
	char o;
	char p;
	char q;
	char r;
	char s;
	char t;
	char u;
	char v;
	getchar();
	l = getchar();
	m  = getchar();
	n  = getchar();
	o  = getchar();
	p  = getchar();
	q  = getchar();
	r  = getchar();
	s  = getchar();
	t  = getchar();
	u  = getchar();
	v  = getchar();
	getchar();
	printf("你的手机号是:%c%c%c%c%c%c%c%c%c%c%c", l, m, n, o, p, q, r, s, t, u, v);
	
	
	return 0;
}

其实就是一段很简单的输入输出,但是我们还没学到数组,只能用一个变量一个变量来输入输出,我写代码的时候头皮发麻,不过这才开始,以后代码会越来越简单

5. 浮点数

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

 6. 运算符

 今天除了自增和自减运算符都学到了,我们就可以用学到的知识来做一个练习:

求出输入数字的每一位上的数字:

#include<stdio.h>

int main(){
	
	int a;
	printf("请输入三位数字a:\n");
	scanf("%d", &a);
	printf("数字a的,个位是:%d, 十位数是:%d, 百位是:%d\n", a % 10, a / 10 % 10, a / 100);
	
	int b;
	printf("请输入四位数字b:\n");
	scanf("%d", &b);
	printf("数字b的,个位是:%d,十位是:%d, 百位是:%d, 千位是:%d\n",b % 10, b / 10 %10, b / 100 % 10, b / 1000); 
	
	int c;
	printf("请输入五位数字c:\n");
	scanf("%d", &c);
	printf("数字c的,个位是:%d,十位是:%d, 百位是:%d, 千位是:%d , 万位是:%d", c % 10, c / 10 % 10, c / 100 % 10, c / 1000 % 10, c /10000);
	
	return 0;
}

运行结果:

总结:

今天对计算机的运算规律有了进一步的认识,原来超出计算的位数,计算机就会“变傻”,将错误的答案输出,学到了原码反码补码的知识就很好解释这些问题,C语言还有很多知识点,慢慢来吧。

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值