单片机中unsigned char 和unsigned int的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机中unsigned char 和unsigned int的区别相关的知识,希望对你有一定的参考价值。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar z);
uchar prem;
void main()

prem=0xfe;
P0=prem;
while(1)

prem=_cror_(prem,1);
delay(100);
P0=0XFF;
delay(100);
P0=prem;



void delay(uchar z)

uint i,j;
for(i=z;i>0;i--)
for(j=100;j>0;j--);

在这个程序中把下面的delay函数中的uint改成uchar有很大区别,为什么?
改过之后delay函数不起作用了 为什么

首先看int和char,分别是整型数据和字符型数据,在计算机里面分别占1个和2个字节空间(TC环境),不同的环境占得字节数可能不同;unsigned int是一个无符号整型数据,而unsigned char则是无符号字符型数据,他们在计算机里所占字节数和int,char完全一样;区别在于unsigned int 与int ( = signed int)型数据范围不同,无符号型数据没有正负之分,而带符号数因为需要用一个数据位存放符号位,所以范围要比无符号数据小,这样,你就能知道unsigned char 和char的区别了!我顺便说一下这四个数据类型各自的范围吧!int (= signed int) -32768 ~ +32767unsigned int 0 ~ 65535char (=signed char) -128 ~ +127
unsigned char 0~255
参考技术A   单片机中unsigned char 与 unsigned int的区别如下:
  unsigned char 是无符号字符,数据长度是8位,表示值范围从0~255
  unsigned int 是无符号整数,数据长度是16位(或者32位,看单片机的型号而定),表示范围从0~65535(或者0~4294967295)
  另外,由于表示值的范围不同,导致它们的计算也会有一些性能的不同。主要体现在数据对齐问题上。cpu在将unsigned char和unsigned int进行混合运算的时候,会先讲前者提升为unsigned int,然后再进行计算。而直接两个unsigned int进行计算,就没有这个问题。
参考技术B 他们都为unsigned关键字修饰的类型,unsigned char表示无符号字符型,unsigned int表示无符号整型
他们在计算机中占用的内存大小不同,unsigned char 占8位,即1个字节,能表示的数据范围是0~255,而unsigned int一般占32位,即4个字节,能表示的数据范围是0~65535。
参考技术C 我的回答只针对C/C++语言,不知道你学的是不是这两种语言。 在C/C++中char型等价于整型数据,占一个字节,8个比特位。在语言中默认的就是signed char ,其范围 对应整数-128~+127,而unsigned char代表的是无符号的字符型,对应的整数范围为0~255. 例如: #include<iostream> using namespace std; int main() char ch='a'; cout<<(int)ch<<endl; return 0; 输出的就是97,即小写字母a,对应的十进制数为97.A对应为65. 参考技术D 1.unsigned int 范围是65536;
2.unsigned char 范围是256.仅此而已;
3.范围取值不一样用个地方也就不一样了,就只有这个区别而已。

C语言实现unsigned char 转换unsigned int?

希望能得到您自己亲身证实了的答案,谢谢 不借用其他函数转换 程序如下: void main(void) unsigned char a=0x11,b=0xFF; unsigned int c=0; c=(a<<8)|b; printf(">>:%x\n",c); 这样能实现吗? 我用在51单片机中

参考技术A 本质上char类型和int其实是同一种类型。。。都代表了整数型大小,转换的话,在前面加上强制转换符就好了,如int()之类的

以上是关于单片机中unsigned char 和unsigned int的区别的主要内容,如果未能解决你的问题,请参考以下文章

unsigned char 与 char 有啥却别?何时适用

java jni 调用 c 代码, c 中 unsigned char* 数据 如何传给java?

ARDUINO 中将一个unsigned char 的数组的数据转化为一个long 型的数

C++ builder中如何把unsigned char类型转换成16进制的输出

如何获取一个unsigned char*类型的字符串长度

C语言实现unsigned char 转换unsigned int?