玩儿转C语言:整数及相关操作

本文介绍了C语言中整数的多种进制表示,包括2进制、8进制、10进制和16进制,并强调了8进制与10进制混淆的潜在问题。接着,讨论了C语言中的short、int和long整数类型及其大小定义,提醒开发者注意不同环境下数据溢出的可能性。此外,文章详细阐述了整数转换可能遇到的数据丢失和错误,特别是有符号与无符号类型之间的转换。最后,分析了整数移位运算的规则和注意事项,指出不同编译器对移位计数的处理差异,并以VS2010为例说明其特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、C语言中整数有几种进制表示方式?使用时要注意哪些问题?

        C语言中可以以多种进制表示整数:2进制、8进制、10进制和16进制。每个进制都有其对应的表示方式:2进制以0b开头,例如0b10111110,;8进制以0开头,例如0144表示的是10进制的100;10进制正常表达即可,不需要特殊转换;16进制以0x开头,例如0xFF表示0b11111111。实际使用中,要注意8进制和10进制的表示方式非常接近不要混淆,010和10是不同的两个数,在变量定义中,有时为了格式对齐的需要,可能会无意中将十进制数据写成了八进制数据,如:045(8进制),124(10进制),068(8进制)等等,他们并不是十进制数据:45,124,68。

2、C语言中整数的类型大小如何定义的?使用时要注意哪些问题?

        C语言中有3种长度的整数:short型、int型和long型。ANSI虽然没有规定这些类型具体占用几个字节(8bit)大小,但是规定了long型整数长度至少是32bit,short型和int型长度至少16bit,3种类型的整数长度非递减(short <= int <= long)。实际使用(尤其是嵌入式开发)中,不同的环境具体实现不同,要明确这些类型所占空间大小,确保数据满足需要不会发生溢出。我带过的实习生在开发中,就曾发生过拿uint_8数据跟300去比较的情况。

3、在进行整数变换时要注意哪些问题?

        C语言允许不同类型的整数之间相互转换,例如16位数据赋值给8位变量(数据截断)或者8位数据赋值给16位变量(数据扩展)。当发生“数据截断”时可能会出现数据丢失,编译器把16位数据分成2个8位数组块,取某一块分配给8位变量,取高8位还是低8位取决于编译器对数据的存放规则是大端还是小端,一般说来小端取低8位大端取高8位,具体以实际数据为准。当发生“数据扩展”时可能会出现数据错误,尤其是源操作数和目的操作数一个是有符号类型一个是无符号类型时。如果两个操作数都是无符号型,则扩展的高数位补0;如果两个操作数都是有符号型,则扩展的高数位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值