c 语言学习第二天
常量
字符串常量
- 字符
例如:'f','i','z','a'编译器为每个字符分配空间。
| 'f' | 'i' | 'z' | 'a' |
|---|
- 字符串
例如:"hello"编译器为字符串里的每个字符分配空间以'\0'结束。
| 'h' | 'e' | 'l' | 'l' | 'o' | '\0' |
|---|
基本类型
- 整数型:
short int,int,long int,long long int(c99 新增).占字节大小按照从小到大书写。 - 浮点数类型:
float,double,long double - 字符类型:
char - 布尔类型:
_Bool - 枚举类型:
enum
sizeof 运算符
用户获取数据类型或表达式的长度。
- sizeof(object); // sizeof(对象);
- sizeof(type_name); // sizeof(类型);
- sizeof object; // sizeof 对象;
因为根据编译器不同,以下的数据类型占字节大小仅供参考
#include <stdio.h>
int main(){
int i;
char j;
float k;
i=123;
j='c';
k=3.123;
printf("size of int is %d \n",sizeof(int));
printf("size of i is %d \n",sizeof i );
printf("size of char is %d \n",sizeof(char));
printf("size of j is %d \n",sizeof j );
printf("size of flaot is %d \n",sizeof(float));
printf("size of k is %d \n",sizeof k );
return 0;
}
size of int is 4
size of i is 4
size of char is 1
size of j is 1
size of flaot is 4
size of k is 4
#include<stdio.h>
int main(){
printf("int sizeof is %d\n",sizeof(int));
printf("short int size is %d\n",sizeof(short));
printf("long int size is %d\n",sizeof(long));
printf("long long int size is %d\n",sizeof(long long));
printf("char size is %d\n",sizeof(char));
printf("_Bool size is %d\n",sizeof(_Bool));
printf("float size is %d\n",sizeof(float));
printf("double size is %d\n",sizeof(double));
printf("long double size is %d\n",sizeof(long double));
return 0;
}
int sizeof is 4
short int size is 2
long int size is 8
long long int size is 8
char size is 1
_Bool size is 1
float size is 4
double size is 8
long double size is 16
signed 和 unsigned
signed:代表带符号位
unsigned:代表不带符号位 ≥0
#include<stdio.h>
int main(){
short i;
unsigned short j;
i = -1;
j = -1;
printf("i is %d\n",i);
printf("j is %u\n",j);
return 0;
}
i is -1
j is 65535
计算机数据单位
cup 读懂的最小单位:bit(比特位).
bit(比特位) => b
| 1 / 0 |
|---|
Byte(字节) => B
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
|---|
关系:1B = 8b
1 字节可以表示多大的数? 十进制:255,十六进制:FF
最大值计算方式:2的n次方-1
| 二进制 | 十进制 | 十六进制 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 10 | 2 | 2 |
| 11 | 3 | 3 |
| 100 | 4 | 4 |
| 101 | 5 | 5 |
| 110 | 6 | 6 |
| 111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | 10 | A |
| 1011 | 11 | B |
| 1100 | 12 | C |
| 1101 | 13 | D |
| 1110 | 14 | E |
| 1111 | 15 | F |
| 10000 | 16 | 10 |
| 10001 | 17 | 11 |
| ... | ... | ... |
| 11111111 | 255 | FF |
- 计算
已知int类型为 4 个字节。
#include<stdio.h>
#include<math.h>
int main(){
int result = pow(2,32)-1;
printf("result is %d\n",result);
return 0;
}
test6.c: In function ‘main’:
test6.c:4:2: warning: overflow in implicit constant conversion [-Woverflow]
int result = pow(2,32)-1;
^
result is 2147483647
运行报出警告,超出定义范围。为什么会这样?
因为在定义的
int类型的时候默认会在前面加上signed类型,所以左边的第一位用来表示符号位。如果为 0 表示正数,如果为 1 表示负数。所以int result其实只有 7 位用来表示数值,其最大值为2^(4*8-1) -1:2,147,483,647.
修改如下:
#include<stdio.h>
#include<math.h>
int main(){
unsigned int result = pow(2,32) - 1; // 在int前加上unsigned
printf("result is %u\n",result); // 这里的%d 需要改成%u
return 0;
}
[root@localhost day1]$ gcc test6.c && ./a.out
result is 4294967295
result 正常显示为 2^8-1 : 4294967295.
计算机如何存储数值?
采用补码的形式存储。
- 正数的补码:该数的二进制形式。
- 负数的补码:
- 先取得该数的绝对值的二进制,也就是正数的二进制。
- 将第一步的值按位取反。
- 将第二步的值 +1.
例如:
7:
0 |
0 | 0 | 0 | 0 | 1 | 1 | 1 |
|---|
-7:
- 获得 7 的二进制
0 |
0 | 0 | 0 | 0 | 1 | 1 | 1 |
|---|
- 按位取反
1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
|---|
- +1
1 |
1 | 1 | 1 | 1 | 0 | 0 | 1 |
|---|
总结
当左边第一位为0的时候,后面的1越多,字面量值越大。
当左边第一位为1的时候,后面的0越多,字面量值越大。
- 基本数据类型取值范围
有符号 1 字节 => -2^(1x8-1) ~ 2^(1x8-1)-1
无符号 1 字节 => 0 ~ 2^(1x8)-1
有符号 4 字节 => -2^(4x8-1) ~ 2^(4x8-1)-1
无符号 4 字节 => 0 ~ 2^(4x8)-1
以此类推
为什么采用补码?
参考一下链接:
c 语言学习第二天的更多相关文章
- C语言学习第二章
今天开始学习常量,变量,基本数据类型,printf()函数和scanf()函数,算术运算符. 首先常量:是在程序中保持不变的量 变量:编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修 ...
- R语言学习 第二篇:矩阵和数组
向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...
- C 语言学习 第二次作业总结
本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...
- go语言学习笔记
Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...
- 20155229-付钰涵-分析自我技能延展到c语言学习状况
我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...
- 20155306白皎 学习技能+C语言学习
你有什么技能比大多数人更好 谈起技能,我还有感觉有微微拿得出手的也只有主持这一项才艺了吧.从小学到高中一直参加朗诵比赛,以及从小学到大学一直在所在学校有担任过主持工作. 上大学以来,也参加了院级朗诵比 ...
- 20155224聂小益 - 我的技能与C语言学习
20155224聂小益 - 我的技能与C语言学习 预备作业2 ● 你有什么技能比大多人(超过90%以上)更好? 我认为我可能有些技能身边有的人比较少有,但是要是超过90%以上我实在不敢保证.毕竟厉害的 ...
- 12天学好C语言——记录我的C语言学习之路(Day 12)
12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...
- 12天学好C语言——记录我的C语言学习之路(Day 11)
12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...
- 12天学好C语言——记录我的C语言学习之路(Day 5)
12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...
随机推荐
- IceRPC之调用管道Invocation pipeline与传出请求Outgoing request->快乐的RPC
作者引言 .Net 8.0 下的新RPC 很高兴啊,我们来到了IceRPC之调用管道 Invocation pipeline与传出请求 Outgoing request->快乐的RPC, 基础引 ...
- 预见预判_AIRIOT智慧交通管理解决方案
随着机动车保有量的逐步增加,城市交通压力日益增大.同时,新能源车辆的快速发展虽然带来了环保效益,但也因不限号政策而进一步加剧了道路拥堵问题.此外,各类赛事和重大活动的交通管制措施也时常导致交通状况复杂 ...
- AIRIOT物联网低代码平台如何配置交通部JT-808协议?
属性配置可配置终端ID和SIM卡号,数据点配置决定设备传上来的哪些数据可以存储展示. 驱动配置可配置采集周期和通讯超时时间. AIRIOT物联网低代码平台如何配置交通部JT-808协议?具体操作如下: ...
- .NET Framework 4.7.2下 Hangfire 的集成
参考资料: 开源的.NET定时任务组件Hangfire解析:https://www.cnblogs.com/pengze0902/p/6583119.html.Net Core 简单的Hangfire ...
- c#事件的实际应用场景
最简单的定义事件的语法 public event Action<bool> Refreash; 先介绍这个Action 这个Action是委托的快速实现方式,我用.net framewor ...
- linux ssh key 登录
vim /etc/ssh/sshd_config #禁用root账户登录,非必要,但为了安全性,请配置 PermitRootLogin no # 是否让 sshd 去检查用户家目录或相关档案的权限数据 ...
- Matlab打印运行进度
在运行matlab程序的过程中,有时候需要实时地掌握程序运行的进度,尤其对于一些耗时较长的循环操作,能够及时地输出运行进度,显得非常有必要. 打印进度条的实现方式就是不断地退格.输出. 退 ...
- Redux之combineReducers方法
Redux 提供了一个combineReducers方法,用于 Reducer 的拆分.你只要定义各个子 Reducer 函数,然后用这个方法,将它们合成一个大的 Reducer. import { ...
- 阻塞外挂 TCP 端口 让外挂服务器增加无用处理 反攻击 是4个IP 苹果 安卓 pc 域名
using namespace std;#include<stdlib.h>#pragma comment(lib,"WS2_32.lib") #include < ...
- winform遍历控件的Controls.OfType<>方法
页面TextBox控件较多时,可以使用类似的名字,方便遍历时整体的修改,可以使用Controls.OfType<TextBox>()获取所有文本框: 需要引用命名空间System.Linq ...