关于C语言unsigned int 的问题
在学习C语言的过程中发现了如下问题:
程序a :编译没警告,下面是结果
程序b :
问题: 将一个32位的二进制数的每一位都写成1的结果就是4294967295,按理来说这是属于unsigned int的范围,但是为什么会报错呢?很不理解。
回答:
原因在于 你源代码里指定的4294967295
这个数字 没有被编译器当作一个int
来处理。
因为源代码其实就是一个
字符串组成的文本
,源代码文本里的4294967295
这个其实也是一个字符串,被编译器读取,如果没有指定他的类型,那么编译器会识别出他的类型
,再用对应的类型存储。
而int型数值的范围是(-2147483648~2147483647)
,4294967295
已经超出这个范围了,所以编译器会将他当成一个long
型的值存储,而long
就已经不止4个字节了,但最终你要将一个long
赋值给一个4字节的无符号整型
必然会发生精度丢失
,所以编译器会发出警告。
回答:
4294967295u
回答:
32的int的头一位是用来表示符号的,第一位为0则为正数,第一位为1则为负数。unsigned int只是说不把第一位当符号了,因为它表示的是无符号的整数,也就是比有符号的多了一位,所以可以表示得更大! 你输入的-1,它只是当成了第一位是1最后 一位是1的无符号数
以上是 关于C语言unsigned int 的问题 的全部内容, 来源链接: utcz.com/p/195840.html