关于C语言中unsigned变量的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言中unsigned变量的问题?相关的知识,希望对你有一定的参考价值。
为什么一个字面量想表示自己是unsigne得在数值后面加u?不能直接这么定义吗:
unsigne int a=100;
定义:
C语言中定义无符号整型变量如下:
unsigned int num;
定义有符号整型变量如下:
signed int num;
或者
省略signed:int num;
C语言如果不注明是否有符号默认是signed;整型常量默认也是有符号int。
举例说明:
比如有定义:unsigned int num = 100;
100是整型常量,因为没有标识编译器默认为有符号int处理。这语句编译会进行隐式转换先把100有符号整数转换成无符号100,再赋值给无符号num变量;
如果有定义unsigned int num = 100u;
那这里是直接告诉编译器100要当作无符号整数进行处理,那就可以直接把100u赋值给num变量。
补充说明:
这里因为100的有符号无符号二进制是一样的,并看不出来有什么不同,如果在超过有符号可表示的范围就不一样了这可以自己实验一下。
所以在写代码时可以手动加上标识符u来告诉编译器如何处理这个整型常量。
参考技术A变量可以用unsigned修饰,常量就不行了
所以要在整型常量后加u,表示无符号数
参考技术B 这只是一个规定而已,是为了区分signed int 100和unsigned int 100 参考技术C 这种情况还是要具体问题具体分析很多情况也是进行相关的情况用相关的调整还是要可以具体问题具体分析也是可以C语言中把unsigned char 型数据赋值给int 型数据会不会出问题
这个问题,因为不知道你具体的使用环境,没法作出进一步的判断,只能将 unsigned char型的变量赋给一个int型的变量会发生什么事情告诉你。unsigned char a = 'A';
int b = -1666666;
b = a;
由于unsigned char类型的变量只有一个字节,而int类型有4个字节,当将一个unsigned char类型的变量赋给一个int型的变量后,会使int型变量的高三个字节全部清零。在上述实例中就是b的高三个字节全部变为0。也就是说b永远为正整数了。细节就是这样了,至于会不会产生副作用,视你的使用环境而定了。 参考技术A 不会有问题, 反正char的数值再大也不会让Int变成负数,
我不记得这样赋值有没有自动的int到unsigned int的升格,
不过肯定不会出问题就是了 参考技术B 直接赋值会有问题。最好是显式转换。
#include <iostream>
using namespace std;
int main()
unsigned char ch = '5';
int i;
i = ch - '0';
cout<<i<<endl;
参考技术C 直接赋值,不会有任何问题 参考技术D 强制转换一下看看,不懂C语言
以上是关于关于C语言中unsigned变量的问题?的主要内容,如果未能解决你的问题,请参考以下文章
C - unsigned int 到 unsigned char 数组转换
(C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))