常量

字符串常量

  • 字符

例如:'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. 先取得该数的绝对值的二进制,也就是正数的二进制。
  2. 将第一步的值按位取反。
  3. 将第二步的值 +1.

例如:

7:

0 0 0 0 0 1 1 1

-7:

  1. 获得 7 的二进制
0 0 0 0 0 1 1 1
  1. 按位取反
1 1 1 1 1 0 0 0
  1. +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

以此类推

为什么采用补码?

参考一下链接:

百度百科:补码

关于2的补码

c 语言学习第二天的更多相关文章

  1. C语言学习第二章

    今天开始学习常量,变量,基本数据类型,printf()函数和scanf()函数,算术运算符. 首先常量:是在程序中保持不变的量 变量:编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修 ...

  2. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  3. C 语言学习 第二次作业总结

    本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...

  4. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  5. 20155229-付钰涵-分析自我技能延展到c语言学习状况

    我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...

  6. 20155306白皎 学习技能+C语言学习

    你有什么技能比大多数人更好 谈起技能,我还有感觉有微微拿得出手的也只有主持这一项才艺了吧.从小学到高中一直参加朗诵比赛,以及从小学到大学一直在所在学校有担任过主持工作. 上大学以来,也参加了院级朗诵比 ...

  7. 20155224聂小益 - 我的技能与C语言学习

    20155224聂小益 - 我的技能与C语言学习 预备作业2 ● 你有什么技能比大多人(超过90%以上)更好? 我认为我可能有些技能身边有的人比较少有,但是要是超过90%以上我实在不敢保证.毕竟厉害的 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  10. 12天学好C语言——记录我的C语言学习之路(Day 5)

    12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...

随机推荐

  1. [POJ2891]Strange Way to Express Integers公式推导

    没啥事干,想着推个式子玩玩. 题目链接 题意不过多赘述,直接上过程: 由题意得 \[\begin{cases} x\equiv a_1\,(mod\,\, n_1) \\ x\equiv a_2\,( ...

  2. C语言:生成单词列表----使用单链表实现

    解决之前用结构体数组导致内存过剩问题,使用动态分配内存优化单词列表. txt文本内容不允许出现其他字符形式,这个仅限于判断在txt网页文件已经删除了超链接等,文本里面只允许出现单词才能进行判断和进行单 ...

  3. Vue cli使用Element UI

    当前的测试环境如下: ---- 新版的@vue/cli ---- Vue2.x版本 第一步:安装Element UI npm i element-ui -S 第二步:引入Element UI 在mai ...

  4. 深入浅出Java异常机制

    一次对Java异常机制的理解 近期有一个对接三方接口的任务,在这个过程中用到了许多 try-catch 处理,发现自己对异常处理是一知半解,浅浅研究了一下,记录一下,也帮助小伙伴如何正确使用 try- ...

  5. 7.28考试总结(NOIP模拟26)[神炎皇·降雷皇·幻魔皇]

    或许只需一滴露水,便能守护这绽放的花朵. 前言 疯狂挂分,本来T2是想用树状数组优化一下的不知道为啥后来看了一下就少看了一层循环, 然后就想,我都 n 的复杂度了,足以搞过第一问了,还优化啥呀.... ...

  6. C#笔记(1)窗体

    1. 隐藏TabPage 在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).设置该TabPage的父容器为null 即可,如TabPage.Parent = null .如 ...

  7. 8个实用的Java Streams API

    分享8个开箱即用的API,方便日常处理集合. 1. 快速过滤空值:Stream.ofNullable 该方法是在 Java 9 中引入的,有助于过滤集合中的所有空值,从而可能使我们避免空指针异常. 在 ...

  8. 面向对象编程 es5和es6的构造函数

     /*         面向对象编程                          本质 创建一个对象                  可以用 属性属性值的 方式 存储 数据参数         ...

  9. map数据类型

      MAP数据类型是一个类似于对象的数据类型             大型项目中会经常使用                      通过 构造函数来定义MAP数据类型             con ...

  10. CF1753

    CF1753 成功因为虚拟机炸了,重新写一遍此文. 都是没有保存的错. A. Make Nonzero Sum 由于 Note that it is not required to minimize ...