c语言中正确的常量表达式,C语言常量变量表达式-程序员宅基地

技术标签: c语言中正确的常量表达式  

常量变量表达式

常量

常量:常量就是一个值确定后就不会发生改变的量。在C语言中可能体会不太深刻。但是理解这个概念却是很重要。以下用swift语言进行说明:

import Foundation

//let用来声明一个常量cst

let cst = 4

//改变常量的值 报错

cst = 5

代码cst = 5报错:

cst is a let constant.可见常量是一个不可改变的值。在很多脚本语言中都有很好的这个特性, 然而在C中初学者并不体会明显。

所以很多问题就可以理解了.

疑难理解:比如有人会好奇++i++或者i++++的值是多少!?

编译不通过。那这是为什么呢?首先++i++无论是计算前边的++还是后边的++都无所谓,最后都会出现++常量 或 常量++。这个肯定是不允许的,不然就违背了常量的设计原则。i++++就不用谈了。这里还突出的是表达式是一个值的概念。当然后文会谈到怎么去看一个表达式。

关于变量

变量注意:

%d 与 %u

位数的截断 和 拓展

常用类型的字节数(32位环境)

【%d与%u】

思考下面代码结果:

int main(int argc, const char * argv[]) {

unsigned int ua = -1;

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

printf("%u\n", ua);

int a = -1;

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

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

return 0;

}

输出:

-1

4294967295

-1

4294967295

对于这个结果其实并不意外, 也有人会说unsigned int不是只能存正数吗? unsigned int 与 int在申请空间这个作用上其实是没有任何区别的, 只是在用这个变量比较的时候怎么去读这个数据产生区别。这个在上一总结字母无限打印已经说明.

计算机在存储数字的时候都以补码方式存储,不看怎么存只看怎么读。这就像那句 横看成岭侧成峰。

他们在内存中存储是一样的形式

ua = 11111111 11111111 11111111 11111111

a = 11111111 11111111 11111111 11111111

至于你把第一为当为符号位 那就是-1.如果当一个无符号数字输出那就是很大的232 - 1.

【截断】

长整型数据赋值给短整型变量时会发生截断,即保留低位,舍去存不下的高位。

这里给一个example

example

short a = 0b1111111100000001;

char b = a;

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

输出:1

这个结果就是去掉高位八个1 省下00000001 那结果当然是1.当然 短字节向长字节会发展拓展。

补充:【扩展】短整型数据赋值给长整型变量时发生扩展,正数高位补0,负数高位补1.

正数高位补上0不会发生值大小改变,这个我不举例。

有人会好奇负数,给example.

example

比如1字节下

b = 1111 1110

这个值是-2

高位拓展比如两字节。这就相当于char 变为short了

b = 1111 1111 1111 1110

这个值还是-2

所以在拓展情况下问题不会太大, 但是截取在绝对值比较小的时候会发生数据丢失。

【类型字节】

给一段代码:

printf("sizeof(char) = %lu\n", sizeof(char));

//sizeof(char) = 1

printf("sizeof(char) = %lu\n", sizeof(short));

//sizeof(char) = 2

printf("sizeof(char) = %lu\n", sizeof(int));

//sizeof(char) = 4

printf("sizeof(char) = %lu\n", sizeof(long));

//sizeof(char) = 8

printf("sizeof(char) = %lu\n", sizeof(long long));

//sizeof(char) = 8

printf("sizeof(char) = %lu\n", sizeof(float));

//sizeof(char) = 4

printf("sizeof(char) = %lu\n", sizeof(double));

//sizeof(char) = 8

那么我们没有定义类型的常量是多少字节呢?

see code:

int main(int argc, const char * argv[]) {

printf("sizeof() = %lu\n", sizeof(1));

//4个空间和int一样

printf("sizeof() = %lu\n", sizeof(1.2));

//8个空间和double一样

//所以在1.2默认8字节但是在末尾加上f之后.单精度4字节空间。所以精度要求不高的情况下加f节约内存。其实这个在应用开发的时候也无所谓了,加f显示素质。

printf("sizeof() = %lu\n", sizeof(1.2f));

//2147483648 = 2 ^ 31最大正数

printf("sizeof() = %lu\n", sizeof(2147483648));//默认系统singed存

//8存储不下了因为是有符号 最大为:

printf("sizeof() = %lu\n", sizeof(2147483648u));

//4 4位无符号能存储, 不解释。

printf("sizeof() = %lu\n", sizeof(2147483647 + 1));

//4 不必深究 变为1000~很大的负数没扩容

return 0;

}

表达式

表达式有变量常量运算符组成。

看一个表达式主要看两点, 功能和值。

比如 1 + 2这个表达式,值是3 功能是加。

表达式认识深入测试

下例打印几次gyk

example

int i = 1;

while (i++ < 50) {

printf("gyk\n");

}

//i++ 的值第一次是1 i++最后一次的值成立时49 故打印49次

关键是 i++是一个表达式, 有值。如果你还去分析i的值变化过程速度肯定很慢。

格式输出

列举12

printf("%+d\n", 10);

//+10

printf("%#o\n", 10);

//012

float f = 123.4567;

printf("%f\n", f);

//123.456703

printf("%-7.2f\n", f);

//123.46

printf("%e\n", f);

//1.234567e+02

printf("%g\n", f);

//123.457 以%f 或%e 中较短的输出宽度输出单、双精度实数

//654.320984,6.543210e+002,654.321

short a = 32;

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

运算符优先级

a9da3538da28

运算符优先级

细节

姑且一提

i+++1会被识别为(i++) + 1原则就是系统从头识别 能识别就确定自己的判断。

7%3, -7%-3, 7%-3, -7%-3 被除数/除数 = 整数 + 余数 1 -1 1 -1

scanf还是给一个思考:输入一个字符打印该字符, 输入一个字符打印一个字符,scanf容易出问题。这个scanf是从缓冲区中读取数据如果缓冲区没数据就会被卡住。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_31738297/article/details/117058004

智能推荐

Kubernetes为什么叫K8S,K8S的优势到底是什么让它成为当前热门?_kubernetes的优势有哪些-程序员宅基地

文章浏览阅读3.5k次。Kubernetes简介、优势、架构优势、用途、核心概念、术语、快速部署_kubernetes的优势有哪些

DO-178B及DO-178C中的MC/DC有什么不同?-程序员宅基地

文章浏览阅读705次。本文简要讨论了DO-178B及DO-178C中MC/DC的定义。简而言之,DO-178B仅允许唯一原因MC/DC,DO-178C扩展了屏蔽MC/DC及短路MC/DC,大大增强了对存在耦合条件情况的适用性。_do-178c

【PTA】【浙大版《Python 程序设计》7-4 特殊a串数列求和 (20 分)_pta7-4求累加和-程序员宅基地

文章浏览阅读1.1k次。给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。输入格式:输入在一行中给出不超过9的正整数a和n。输出格式:在一行中按照“s = 对应的和”的格式输出。输入样例:2 3输出样例:s = 246思路:列表解析式构建列表,再求和a,n=list(map(int, input().split())) s = sum([int(s..._pta7-4求累加和

AttributeError: module ‘torch.distributed‘ has no attribute ‘deprecated‘的问题解决_module 'torch.distributed' has no attribute 'reduc-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏2次。Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\metya\Anaconda3\lib\site-packages\apex\__init__.py", line 4, in <module> from . import parallel File "D:\metya\Anaconda3\lib\site-packages\apex\par._module 'torch.distributed' has no attribute 'reduceop

oracle之索引优化_oracle索引的使用和优化-程序员宅基地

文章浏览阅读2.4k次。oracle中单列索引和复合索引的选择以及导致索引失效一些常见情况(包含对最佳左前缀和全表扫描的描述)_oracle索引的使用和优化

15.脚本备份、恢复达梦DM数据库_docker 达梦数据库 备份恢复-程序员宅基地

文章浏览阅读458次,点赞8次,收藏11次。脚本命令恢复、备份达梦DM数据库_docker 达梦数据库 备份恢复

随便推点

java 与mysql数据类型映射_java和mysql geometry类型 映射-程序员宅基地

文章浏览阅读883次。MySQLJavaCHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERintBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINAR..._java和mysql geometry类型 映射

均值、方差、标准差、均方根、均方误差、均方根误差的区别与联系_均方根差和均方根-程序员宅基地

文章浏览阅读2.6k次。均值、方差、标准差、均方根、均方误差、均方根误差的区别与联系The mean, variance, and standard deviation are the most basic statistical measures. The mean均值μx\mu_{x}μx​, and variance方差 σx2\sigma_{x}^{2}σx2​, of a set of nnn observations, xix_{i}xi​, are defined asμx=1n∑i=1nxi,σx2=1n∑i=_均方根差和均方根

【计算机毕业设计】206校园顺路代送微信小程序-程序员宅基地

文章浏览阅读46次。现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园顺路代送微信小程序就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此校园顺路代送微信小程序利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。校园顺路代送微信小程序管理员有个人中心,用户管理,发布者

请问想考软考,零基础的话,哪个证书最好考呢_软考哪个容易通过-程序员宅基地

文章浏览阅读4k次。网络工程师、多媒体应用设计师、嵌入式系统设计师、计算机辅助设计师、电子商务设计师、信息系统监理师、数据库系统工程师、系统集成项目管理工程师、信息系统管理工程师、信息安全工程师、计算机硬件工程师、信息技术支持工程师、软件评测师、软件设计师、软件过程能力评估师。记住十大知识领域的各个过程输入输出,另一个重要原因就是,不管考试考哪一个过程,你只要记住了那个过程的流程,在读案例的时候就根据标准的流程去检查,这样能准确的知道案例的问题在哪里。(1)熟悉信息化知识和信息化技术,了解我国信息化建设的有关政策和发展规划;_软考哪个容易通过

Android Studio运行遇到 Error while Launching activity问题_androidstudio运行一直显示在lanching app-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏2次。当我们写完应用程序,先测试一下,其他的什么都没有做的时候,发现怎么都运行不了,而且还出现 Error while Launching activity这个错误,其实这个错误非常好解决,只需要在build中选择clean就可以。是不是很神奇呢!本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!_androidstudio运行一直显示在lanching app

华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和nova8se的详细对比参数对比-程序员宅基地

文章浏览阅读1.3k次。原标题:华为nova7se乐活版和nova8se的详细对比参数对比华为nova7se乐活版和nova8se作为性价比还不错的中端机型,不少小伙伴们不知道该如何选择?那么华为nova7se乐活版和nova8se相比哪款更值得大家入手?小编为大家带来关于华为nova7se乐活版和nova8se的详细对比,欢迎查看。1、主要参数对比参数配置华为nova7SE乐活版华为nova8SE屏幕尺寸6.5英寸6...._华为nova7se可以正常使用华为钱包

推荐文章

热门文章

相关标签