c语言数据转移,重温C语言(2)之数据

一 数据类型

数据就是代表某些信息的数字和字符。

按计算机的储存方式可分为两大基本类型:整数类型和浮点数类型。

1 关键字

初始

C90

C99

int

signed

_Bool

long

void

_Complex

short

_Imaginary

unsigned

char

float

double

2 存储单元

首先得记住,计算机内部都是以二进制进行编码的。

bit: 位,最小的存储单元,可以储存0或1。位是计算机内存的基本构成块;

byte: 字节,是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。

word:字,设计计算机时给定的自然存储单元,对于8位计算机1字长只有8位。后来快速发展,已经从8位、16位、32位、发展到现在的64位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。

3 整数

整数是没有小数部分的数。计算机用二进制数字存储整数。例如数字7的二进制存储是00000111。

4 浮点数

有小数点的值就是浮点数。

因为在任何区间内(如,1.0到2.0之间)都存在无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的近似值,比如,7.0可能被储存为浮点值6.99999。

二 基本数据类型

int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_Imaginary。

1. int

有符号整型,可以是正整数、负整数或0。

一般而言,储存一个int要占用一个机器字长。即16位计算机1个int值占16位(-32768~32768),32位计算机用32位存储一个int值,64位计算机用32位存储一个int值。

ISO C规定int的取值范围最小为-32768~32767。

(1)进制

相对于十进制,我更喜欢八进制和十六进制。8和16都是2的幂次方,而10不是,通俗说八进制和十六进制记数系统在表达与计算机相关的值时很方便。例如16位中的十进制65536用十六进制表示是10000,十六进制的每一位数由4位二进制组成,例如5的二进制是0101,6的二进制是0110,因此十六进制56的位组合是 01010110。

在C语言中,用特定的前缀表示使用哪种进制。0x或0X前缀表示十六进制值,所以十进制数16表示成十六进制是0x10或0X10。与此类似,0前缀表示八进制。

下面代码显示了三种进制:

#include

int main(){

int x = 73;

printf("十进制 = %d,八进制 = %o,十六进制 = %x\n", x, x, x);

printf("十进制 = %d,八进制带前缀 = %#o,十六进制带前缀 = %#x", x, x, x);

return 0;

}

94c0af198275

(2)其他整数类型

short:有符号类型,占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间;

long:有符号类型,占用的存储空间可能比int多,适用于较大数值的场合;

long long:有符号类型,占用的存储空间可能比long多,适用于更大数值的场合,该类型至少占64位;

unsigned int:间写 unsigned int, 无符号整型,只适用于非负值,用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数,16位unsignedint允许的取值范围是0~65535。

根据机型的不同,各种整数类型占用的空间也不同:

最早 short 16位,int 16位,long 32 位;

后来 short 16位, int 32位,long 32位;

现在使用了64位的处理器 short 16位, int 16或32位(根据计算机自然存储单元定),long 32位, long long 64位。

溢出:表示值超出了该类型的代表范围。比如当类型的值达到最大值时,二进制存储的所有位全是1即1111...111, 在加 1 的话就会造成溢出,所有为进位变成了0,最高位的1超出了类型的二进制位数就会被抛弃,所以最大值加1的结果就是变成了最小值。

unsigned short us = -1;

printf("%d\n", us); // 65535

2. char

用于存储字符。计算机使用特定的整数来存储特定的字符,所以 char 类型实际存储的是整数,在ASCII码中,65代表A。

商用的统一码(Unicode)创建了一个能表示世界范围内多种字符集的系统,目前包含的字符已超过110000个。

C 语言定义char类型占用的位数是一个字节。

printf("%c\n", 65); // A

printf("%c\n", 'A'); // A

转义序列

含义

\a

警报

\b

退格

\f

换页

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

3. _Bool

布尔值即true和false,c语言用1表示true,0表示false。技术层面是只占1位存储空间的整数类型。

4. 可移植类型:stdint.h和inttypes.h

C99新增了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各系统中的功能相同。

精确宽度整数类型(exactwidthintegertype):如int32_t表示整数类型的宽度正好是32位。

5. float, double, long double

printf("int 类型有 %d 字节\n", sizeof(int));

printf("char 类型有 %d 字节\n", sizeof(char));

printf("long 类型有 %d 字节\n", sizeof(long));

printf("long long 类型有 %d 字节\n", sizeof(long long));

printf("double 类型有 %d 字节\n", sizeof(double));

printf("long double 类型有 %d 字节\n", sizeof(long double));

printf("_Bool 类型有 %d 字节\n", sizeof(_Bool));

printf("float 类型有 %d 字节\n", sizeof(float));

int 类型有 4 字节

char 类型有 1 字节

long 类型有 8 字节

long long 类型有 8 字节

double 类型有 8 字节

long double 类型有 16 字节

_Bool 类型有 1 字节

float 类型有 4 字节

三 算法前瞻

/**

* 有一根27厘米的细木杆,

* 在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。

* 木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,

* 它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。

* 假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最短时间和最长时间。

*/

void antCode() {

int antSize = 5;

double nums[] = {3, 7, 11, 17, 23};

printf("sizeof(nums)=%d\n", antSize);

double lineSize = 27;

double max = 0;

double min = nums[0];

for (int i = 0; i < antSize; ++i) {

double left = nums[I];

double right = lineSize - nums[I];

printf("%d: left=%f, right=%f\n", i, left, right);

max = fmax(max, fmax(left, right));

min = fmax(min, fmin(left, right));

}

printf("max=%f; min = %f\n\n\n\n\n", max, min);

}

/**

* 找出符合如下条件的 9位数:

* 这个数包括了 1 ~ 9这 9个数字。这个 9位数的前 n位都能被 n整除,若这个数表示为 abcdefghi,则 ab可以被 2整除, abc可以被 3整除…… abcdefghi可以被 9整除。

*/

void nineNumber(){

for (int i = 1; i < 10; ++i) {

nineNumberLogic(i, 2);

}

}

void nineNumberLogic(int a, int n){

if (n > 9) {

printf("%d\n", a);

return;

}

int first = a * 10;

// 这里可以判断奇偶数来进一步提高效率

for (int i = 1; i < 10; ++i) {

int b = first + I;

if (b % n == 0) {

nineNumberLogic(b, n + 1);

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对esp和ebp分析来了解函数的调用过程

esp&#xff1a;扩展栈指针寄存器&#xff0c;是指针寄存器的一种&#xff0c;用于存放函数栈顶指针&#xff08;栈顶指针&#xff09; ebp&#xff1a;扩展基址指针寄存器&#xff0c;也被称为帧指针寄存器&#xff0c;用于存放函数栈底指针&#xff08;栈底指针&#xff09;。…

放大镜,缩小镜

今天看了 CSDN上的很多文章&#xff0c;有很经典的&#xff0c;也有比较一般的&#xff0c;加上昨天我们老大发给我看的一些CEO的讲话内容的文章&#xff0c;突然发现&#xff0c;不知道是这个行业内部的问题还是整个国内评论家门的问题&#xff0c;在讨论和研究一个问题的时候…

SEO你所不知道的!!SEO资源人脉才是王道

头脑在个人身上&#xff0c;思维在自己脑中&#xff0c;自己为什么要老是听从别人的话语呢?别人让你往西&#xff0c;你就直奔西处吗?这是我以前犯下的一个错误&#xff0c;总感觉自己好像就是再为 别人而用&#xff0c;自己的理想目标何在?因为刚入社会&#xff0c;遇到这样…

仿射变换 c语言,c语言数字图像处理(三):仿射变换

仿射变换及坐标变换公式几何变换改进图像中像素间的空间关系。这些变换通常称为橡皮模变换&#xff0c;因为它们可看成是在一块橡皮模上印刷一幅图像&#xff0c;然后根据预定的一组规则拉伸该薄膜。在数字图像处理中&#xff0c;几何变换由两个基本操作组成&#xff1a;(1)坐标…

C和汇编混合编程----实现浮点数的加减乘除

加法 C程序&#xff1a; #include "stdio.h"int main() {float a1.0;float b2.34;float c;cab;printf("c%f",c);return 0; }反汇编之后&#xff0c;实现加法的关键程序 5: float a1.0; 00401028 C7 45 FC 00 00 80 3F mov dword ptr [eb…

java删除指定索引元素_将对象/元素添加到列表中的Java指定索引处

java删除指定索引元素We have to create a List and add objects/elements to the List and given indexes in java. 我们必须创建一个List并将对象/元素添加到该List中&#xff0c;并在Java中添加给定的索引。 To add any object/element at given index to the List, we use…

使用ActiveX读取客户端mac地址

//保存为html文件<HTML><HEAD><TITLE>获取客户端MAC和用户名</TITLE><META http-equivContent-Type content"text/html; charsetgb2312"><SCRIPT languageJScript event"OnCompleted(hResult,pErrorObject, pAsyncContext)&qu…

【Wordpress】分享500多款国外WordPress经典主题 其之三

从国外网站上淘来的WordPress主题&#xff0c;以前都是放在本人博客xcodeland.mooo.com上的后来空间挂掉了就转到这里来与大家分享。 modernclean 下载地址 just-business 下载地址 redrum 下载地址 aneducation 下载地址 artsie 下载地址 eveningalone 下载地址 wasabi …

python 微秒_Python程序可显示当前时,分,秒和微秒

python 微秒In the below example – we are implementing a python program to print current hour, minute, second and microsecond. 在下面的示例中-我们正在实现一个python程序来打印当前时&#xff0c;分&#xff0c;秒和微秒 。 Steps: 脚步&#xff1a; Import the d…

终于知道RTM的含义了

从关注VS 2005开始&#xff0c;注意到RTM、RC这几个缩写&#xff0c;一直没找到是什么意思。今天终于知道了含义&#xff1a;RTM&#xff1a;Release To Manufacturing意味着开发工作已结束, RTM 版将提供给发行商、OEM 硬件厂商、驱动程序开发者、独立软件开发者等。RC&#x…

C和混编混合编程----strcpy缓存溢出原理

今天老师给了一到程序&#xff0c;让我们分析分析原理&#xff0c;关于strcpy缓存溢出原理的&#xff0c;反汇编一遍遍调试&#xff0c;终于看明白了&#xff0c;记录一下 C程序&#xff1a; #include "string.h" #include "stdio.h" char *shellcode&quo…

16进制的简单运算

描述 现在给你一个16进制的加减法的表达式&#xff0c;要求用8进制输出表达式的结果。 输入 第一行输入一个正整数T&#xff08;0< T<100000&#xff09; 接下来有T行&#xff0c;每行输入一个字符串s&#xff08;长度小于15)字符串中有两个数和一个加号或者一个减号&…

逝去的大学生活自己丢了什么

1.一个HP电脑包挂在外面的阳台 2.一个蚊帐 3.乱七八糟的垃圾 4.两双篮球鞋 5.一台电脑桌送给了阿姨&#xff0c;不到一会儿就消失不见了 6.一辆自信车给了好朋友 7.三个水果筐给了阿姨 这么大方的丢东西丢的最多的一次 祭奠我逝去的大学&#xff0c;祭奠我丢失的东西&#xff0…

android 中文api 在线测试,android webview测试方法

利用chromedriver操作webview1.创建chrome serverchromedriver --url-basewd/hub --port9515 --adb-port50372.创建sessionPOST http://127.0.0.1:9515/wd/hub/session参数&#xff1a;{"desiredCapabilities":{"chromeOptions":{"androidPackage&quo…

几篇介绍在页面中引用脚本文件的技术文档

在一个页面中包含一个脚本文档是多么简单的一件事&#xff0c;但今天看了几篇文章后&#xff0c;才发现在一个这么简单的功能也有这么多的技巧可谈&#xff0c;以下是这几篇文章挣脱浏览器的束缚&#xff08;1&#xff09; - 前言挣脱浏览器的束缚&#xff08;2&#xff09; - …

Java StringBuffer insert(int offset,String s)方法,带示例

StringBuffer类insert(int offset&#xff0c;String s) (StringBuffer Class insert(int offset , String s)) This method is available in package java.lang.StringBuffer.insert(int offset, String s). 软件包java.lang.StringBuffer.insert(int offset&#xff0c;Strin…

C和汇编混合编程--------函数调用后ebp、esp值问题

今天老师又给了一个程序&#xff0c;让我们分析&#xff0c;记录一下分析过程 程序&#xff1a; #include "stdio.h" #include "string.h"char *shellcode"\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00"; void fun1(int a, int b) {print…

C小加 之 随机数

描述 ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数&#xff08;0< N≤100&#xff09;&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同…

How to use fb.data.query to get friends info?

参考代码1&#xff1a; varquery FB.Data.query(select uid, first_name, last_name, work, from user where uid{0}, response.id);query.wait(function(rows) {varloginData {fb_uid: rows[0].uid, first_name: rows[0].first_name, last_nam…

android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

ListView的主要有两种滑动事件监听方法&#xff0c;OnTouchListener和OnScrollListener1、OnTouchListenerOnTouchListener方法来自View中的监听事件&#xff0c;可以在监听三个Action事件发生时通过MotionEvent的getX()方法或getY()方法获取到当前触摸的坐标值&#xff0c;来对…