当前位置:首页 > 网络黑客 > 正文内容

c语言求和1到100求和程序(c语言1到100求和代码)

hacker7个月前 (05-28)网络黑客55

在数学中,数字有正负之分。在C语言中也是一样,short、int、long 都可以带上正负号,例如:

//负数

short a1 = -10;

short a2 = -0x2dc9; //十六进制

//正数

int b1 = +10;

int b2 = +0174; //八进制

int b3 = 22910;

//负数和正数相加

long c = (-9) + (+12);

如果不带正负号,默认就是正数。

符号也是数字的一部分,也要在内存中体现出来。符号只有正负两种情况,用1位(Bit)就足以表示;C语言规定,把内存的最高位作为符号位。以 int 为例,它占用 32 位的内存,0~30 位表示数值,31 位表示正负号。如下图所示:

在编程语言中,计数往往是从0开始,例如字符串 "abc123",我们称第 0 个字符是 a,第 1 个字符是 b,第 5 个字符是 3。这和我们平时从 1 开始计数的习惯不一样,大家要慢慢适应,培养编程思维。

C语言规定,在符号位中,用 0 表示正数,用 1 表示负数。例如 int 类型的 -10 和 +16 在内存中的表示如下:

展开全文

short、int 和 long 类型默认都是带符号位的,符号位以外的内存才是数值位。如果只考虑正数,那么各种类型能表示的数值范围(取值范围)就比原来小了一半。

c语言求和1到100求和程序(c语言1到100求和代码)

但是在很多情况下,我们非常确定某个数字只能是正数,比如班级学生的人数、字符串的长度、内存地址等,这个时候符号位就是多余的了,就不如删掉符号位,把所有的位都用来存储数值,这样能表示的数值范围更大(大一倍)。

C语言允许我们这样做,如果不希望设置符号位,可以在数据类型前面加上 unsigned 关键字,例如:

unsigned short a = 12;

unsigned int b = 1002;

unsigned long c = 9892320;

这样,short、int、long 中就没有符号位了,所有的位都用来表示数值,正数的取值范围更大了。这也意味着,使用了 unsigned 后只能表示正数,不能再表示负数了。

如果将一个数字分为符号和数值两部分,那么不加 unsigned 的数字称为有符号数,能表示正数和负数,加了 unsigned 的数字称为无符号数,只能表示正数。

请读者注意一个小细节,如果是unsigned int类型,那么可以省略 int ,只写 unsigned,例如:

unsigned n = 100;

它等价于:

unsigned int n = 100;

无符号数的输出

无符号数可以以八进制、十进制和十六进制的形式输出,它们对应的格式控制符分别为:

unsigned shortunsigned intunsigned long八进制%ho%o%lo十进制%hu%u%lu十六进制%hx 或者 %hX%x 或者 %X%lx 或者 %lX

我们也讲到了不同进制形式的输出,但是上节我们还没有讲到正负数,所以也没有关心这一点,只是“笼统”地介绍了一遍。现在本节已经讲到了正负数,那我们就再深入地说一下。

严格来说,格式控制符和整数的符号是紧密相关的,具体就是:

%d 以十进制形式输出有符号数;

c语言求和1到100求和程序(c语言1到100求和代码)

%u 以十进制形式输出无符号数;

%o 以八进制形式输出无符号数;

%x 以十六进制形式输出无符号数。

那么,如何以八进制和十六进制形式输出有符号数呢?很遗憾,printf 并不支持,也没有对应的格式控制符。在实际开发中,也基本没有“输出负的八进制数或者十六进制数”这样的需求,我想可能正是因为这一点,printf 才没有提供对应的格式控制符。

下表全面地总结了不同类型的整数,以不同进制的形式输出时对应的格式控制符(--表示没有对应的格式控制符)。

shortintlongunsigned shortunsigned intunsigned long八进制------%ho%o%lo十进制%hd%d%ld%hu%u%lu十六进制------%hx 或者 %hX%x 或者 %X%lx 或者 %lX

有人可能会问,我们也使用 %o 和 %x 来输出有符号数了,为什么没有发生错误呢?这是因为:

当以有符号数的形式输出时,printf 会读取数字所占用的内存,并把最高位作为符号位,把剩下的内存作为数值位;

当以无符号数的形式输出时,printf 也会读取数字所占用的内存,并把所有的内存都作为数值位对待。

对于一个有符号的正数,它的符号位是 0,当按照无符号数的形式读取时,符号位就变成了数值位,但是该位恰好是 0 而不是 1,所以对数值不会产生影响,这就好比在一个数字前面加 0,有多少个 0 都不会影响数字的值。

如果对一个有符号的负数使用 %o 或者 %x 输出,那么结果就会大相径庭,读者可以亲试。

可以说,“有符号正数的最高位是 0”这个巧合才使得 %o 和 %x 输出有符号数时不会出错。

再次强调,不管是以 %o、%u、%x 输出有符号数,还是以 %d 输出无符号数,编译器都不会报错,只是对内存的解释不同了。%o、%d、%u、%x 这些格式控制符不会关心数字在定义时到底是有符号的还是无符号的:

你让我输出无符号数,那我在读取内存时就不区分符号位和数值位了,我会把所有的内存都看做数值位;

你让我输出有符号数,那我在读取内存时会把最高位作为符号位,把剩下的内存作为数值位。

说得再直接一些,我管你在定义时是有符号数还是无符号数呢,我只关心内存,有符号数也可以按照无符号数输出,无符号数也可以按照有符号数输出,至于输出结果对不对,那我就不管了,你自己承担风险。

也就是说,整数在写入内存之前可能会发生转换,在读取时也可能会发生转换,而我们没有考虑这种转换,所以才会导致推理错误。那么,整数在写入内存前,以及在读取时究竟发生了怎样的转换呢?为什么会发生这种转换呢?

本期到此结束

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/147899.html

分享给朋友:

“c语言求和1到100求和程序(c语言1到100求和代码)” 的相关文章

奥运会遭到俄罗斯黑客攻击!黑客攻击微信聊天记录

人民网2021年8月13日02:28:03的消息,黑客攻击微信聊天记录 东京奥运会惨遭俄罗斯黑客攻击! 英国国家网络安全中心日前揭露了一项惊人的黑客计划:俄罗斯军事情报部门曾准备对原定今夏举办的东京奥林匹克运动会和残奥会发起网络攻击。据悉,其攻击目标涵盖赛事组织者、后勤公司和赞助商。 打开百...

为什么反复烧开的水会有毒?

为什么反复烧开的水会有毒? 千滚水就是在炉上沸腾了一夜或很长时间的水,还有电热水器中反复煮沸的水。这种水因煮过久,水中不挥发性物质,如钙、镁等重金属成分和亚硝酸盐因浓缩后含量很高。久饮这种水,会干扰人的胃肠功能,出现暂时腹泻、腹胀;有毒的亚硝酸盐还会造成机体缺氧,严重者会昏迷惊厥,甚至死亡。 蒸...

种植土茯苓亩产多少斤(2020年广东土茯苓收购价格)

茯苓菌种每亩需要1800-2000袋,茯苓价格悄悄地涨了一点点,价格相对来说也是广东比较高的?笔者愿以此文与商家药农探讨,土茯苓的块茎分为赤白两种。 多生于山坡或林下。生活的。常年经销户,在亳州,统计中得到印证:安徽亳州:年销量6000吨以上。主要是零售。每年收一次。 主要是看品种,2005亩产-2...

如厕阅读-如厕时读书看报有哪些坏处?

如厕阅读-如厕时读书看报有哪些坏处? 读书、看报兼如厕,不少人有这样的习惯。然而这一习惯非常不好。蹲厕时读书看报,会干扰大脑对排便传导神经的指挥,延长排便时间。现代医学研究证实,蹲厕超过3分钟即可直接导致直肠静脉曲张淤血,易诱发痔疮,且病情的轻重与时间长短有关。蹲厕时间越长,发病几率越高。因为久蹲...

怎样辨别有农药残留的蔬菜?

怎样辨别有农药残留的蔬菜? 一、不吃形状、颜色异常的蔬菜: 形状:颜色正常的蔬菜,一般是常规栽培,是未用激素等化学品处理的,可以放心地食用。 “异常”蔬菜可能用激素处理过,如韭菜,当它的叶子特别宽大肥厚,比一般宽叶一次同学聚会,我发现很多同学已经有房有车,毕竟毕业三年了,而我还只是每个月三千块...

宋pro1.5t买哪款合算 - 奇瑞1.5t发动机通病

而且车内空间也比轿车更宽敞。这款发动机的油耗还是比较高的,油耗、操控,比亚迪在科技配置方面一向是非常舍得,外观各方面均不错。该发动机为单顶置凸轮轴,奇瑞的技术储备应该是首当其冲的,而且保有量大将来保养维修也比较实惠。 缺点是技术老,在发动机第一盘变速箱方面拥有非常多的,身边朋友都劝他别买,它搭载的是...

评论列表

纵遇空宴
7个月前 (05-28)

int ,只写 unsigned,例如:unsigned n = 100;它等价于:unsigned int n = 100;无符号数的输出无符号数可以以八进制、十进制和十六进制的形式输出,它们对应的格式控制符分别为:unsigned shortunsigned intunsigned

南殷闻枯
7个月前 (05-28)

hX%x 或者 %X%lx 或者 %lX我们也讲到了不同进制形式的输出,但是上节我们还没有讲到正负数,所以也没有关心这一点,只是“笼统”地介绍了一遍。现在本节已经讲到了正

森槿煞尾
7个月前 (05-28)

符号只有正负两种情况,用1位(Bit)就足以表示;C语言规定,把内存的最高位作为符号位。以 int 为例,它占用 32 位的内存,0~30 位表示数值,31 位表示正负号。如下图所示: 在编程语言中,计数往往是从0

泪灼云胡
7个月前 (05-28)

也是数字的一部分,也要在内存中体现出来。符号只有正负两种情况,用1位(Bit)就足以表示;C语言规定,把内存的最高位作为符号位。以 int 为例,它占用 32 位的内存,0~30 位表示数值,31

可难绣羽
7个月前 (05-28)

在数学中,数字有正负之分。在C语言中也是一样,short、int、long 都可以带上正负号,例如://负数short a1 = -10;short a2 = -0x2dc9; //十六进制//正数int b1 = +10;int b2 =

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。