首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换说明符是如何工作的?

转换说明符是如何工作的?
EN

Stack Overflow用户
提问于 2014-03-24 17:30:52
回答 3查看 102关注 0票数 0

我可以检查一下我对scanf的理解吗?

代码语言:javascript
复制
int a;
scanf("%d",&a);

如果我输入13,转换说明符是否将13转换为二进制并将其存储在a

如果输入是13.3,那么它是否将十进制分数13.3转换为二进制并将其存储在?

EN

回答 3

Stack Overflow用户

发布于 2014-03-24 20:15:21

我不知道你对C语言的了解,但是在C中数据存储是一个非常重要和有趣的话题。当数据存储在变量中时,它总是二进制格式,在简单的C语言中不可能看到二进制数据,但你可以在嵌入式C中看到二进制数据。我们在任何端口或任何在内部提供数据的程序中传递数据,然后将输出发送到连接到led的任何端口。假设您在一个端口中传入-1,并且该端口正在向与其连接的led发送输出,那么您可以看到与其连接的所有led都将发光。在C语言中,你可以这样观察

代码语言:javascript
复制
char c=-1;

printf("%u",c); 

output=255 %u用于无符号整数,这不是一个错误,您可以检查它。int和char总是以相同的方式存储,这意味着如果你尝试存储char A,那么我认为它的ASCII值65将以二进制方式存储。

代码语言:javascript
复制
char ch='A';
printf("%d",ch);
output 65 

相同的

代码语言:javascript
复制
int i=65;
printf("%c",i);

输出A;但是浮点数的存储完全不同于int,它有三个不同的部分,一个是符号位,第二个是尾数,然后是指数。假设

代码语言:javascript
复制
float f=5.55;
if(f==5.55)
pf("true");
else 
pf("false");
output : false

现在再说一遍

代码语言:javascript
复制
float f=5.25;
if(f==5.25)
pf("true");
else 
pf("false");

输出:真的,所以这都是关于内存中的数据存储,非常重要的话题,通常老师不会在课堂上讨论。希望能为你用足。

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 17:39:16

简而言之,是的。计算机可以使用不同的编码来存储数据。有些机器是little endian some are big endian

对于,你可以引用浮点数,

IEEE floating point

票数 -1
EN

Stack Overflow用户

发布于 2014-03-24 17:42:28

简而言之,不是。但您可以更改代码以使其几乎正常工作。

代码语言:javascript
复制
float a;
scanf("%f",&a);

然而,.3永远不能精确地存储在浮点型中。

还有一种十进制类型,基于十进制的浮点数(与基于二进制的类型相反)。它可以准确地存储0.3 (以及您可以键入的所有其他数字,直到它的精度)。但是你仍然不能存储1/3 (你需要一个零碎的存储来精确地存储它)。或者π(你需要一个符号库来存储它)。然而,您并不总是需要精确。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22605469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档