C语言,关于unsigned char 和 unsigned int的提问

是这样的,我写了一个子函数,其中用到一个for语句for(dat=0;dat<256;dat++),我对dat的声明 如果用unsigned char 则OK,如果用unsigned int则dat循环是由实际效果看是从0x80而不是0x00开始的,这是为什么?编译器的问题?
代码太多,我抄了个构架如下:
unsigned char funProcessSettestregCommand()
{
unsigned int loop=0;
unsigned char addrH,addrL;
unsigned char dat;
unsigned char RW_dat;
unsigned char tmp_dat=0;
for(dat=0;dat<256;dat++)
{
addrH = Addr>>8&0xff;
addrL = Addr&0xff;
tmp_dat = dat & WD_Data;
spi_write(addrH,addrL,tmp_dat);
RW_dat = spi_read(addrH,addrL); //一个SPI读函数
RW_dat = RW_dat & WD_Data;
if(tmp_dat == RW_dat)
{
printf("0x%04x 0x%02x 0x%02x\n\r",(unsigned int)Addr,(unsigned int)RW_dat,(unsigned int)tmp_dat);
}
else
{
printf("0x%04x 0x%02x != 0x%02x\n\r",(unsigned int)Addr,(unsigned int)RW_dat,(unsigned int)tmp_dat);
}
loop++;
}
}
我用printf函数验证了,从FOR语句开始dat的值就是0x80,把unsigned int dat的声明变成unsigned char,dat的值就变成了我决定应该是的0x00.

第1个回答  2012-12-11
可能的原因.
1. dat 的初始值你没有设置.(默认是随机的)
2.你看错了.
请贴代码
第2个回答  2012-12-12
啊哈,肯定是对整形在计算机内的表示没有很懂
特别是补码和无符号整形的区别
还有有符号整形和无符号整形的区别
你把代码给我,我看看有没有问题追问

如问题补充,谢谢。我觉得也应该补码啦,或者编译器之类的问题吧。

来自:求助得到的回答本回答被网友采纳
第2个回答  2012-12-12
可以把那一个模块代码贴出来 ,也能看明白了
第3个回答  2012-12-11
问题没写错吧?

把代码和执行结果贴上来吧

c语言中unsignedcharC语言的unsignedint到底是什么意思
1、C语言中unsigned  int是无符号整数的意思。2、无符号整型(unsigned  int):(1)我们都知道整型是4个字节(有些编译器不同,可能会是2个),即32位,无符号整型当然也为32位。3、(2)既然是32位,无符号整型的取值是32个0~32个1,即:0~4294967295(3)我们举个例子:32位有...

C语言 字符串变量设定问题:unsigned int还是unsigned char?
首先,C语言是严格取费大小写的,大写的和小写的singned是不一样的,在C语言中,是没有UNSIGEND 这个的,可以在VC6.0下,输入这个大写的字符,发现是有错误的。仔细看下,前面是否有宏命令,如:#define INT int 诸如此类的宏命令,或者type的类型。具体的使用可以看看相关资料。其次 字符型是存贮...

C语言中关于unsigned int的问题。
printf说明符%x对应什么,应该是对应unsigned int类型,是2或4字节的数据类型,unsigned char只有一字节,必然会出错

C语言 unsigned char 和unsigned int什么区别和联系?分别多少位?求简介...
unsigned char为无符号字符类型,而unsigned int为无符号整数类型。unsigned char为8位,多数情况下unsigned int为32位。但随系统的不同它的位数可能变化,有时是与系统位数对齐的,也就是说对8位的系统,它是8位,16位系统则为16位,32位的系统则为32位。

c语言的unsignedint是什么意思?
C语言的unsigned int是无符号整型变量的意思。1. unsigned int定义 在C语言中,`unsigned int`是一种整型数据类型,用于存储整数。与常规的`int`类型不同,`unsigned int`表示的是非负整数,即它不会有负值。这是因为`unsigned int`是无符号的,即不包含表示负数的符号位。2. 存储范围 由于`unsigned...

C语言中 unsigned char和unsigned int的区别
首先看int和char,分别是整型数据和字符型数据,在计算机里面分别占1个和2个字节空间(TC环境),不同的环境占得字节数可能不同;unsigned int是一个无符号整型数据,而unsigned char则是无符号字符型数据,他们在计算机里所占字节数和int,char完全一样;区别在于unsigned int 与int ( = signed int)型...

C语言中unsigned long和unsigned int是什么意思啊?
在C语言中可以用unsigned int或unsigned short或unsigned char或unsigned long关键字来定义一个正整数变量。unsigned int表示无符号整型。能表示数的范围为0~(2^16-1)(unsigned int占2字节,16位机系统,如Turbo C)或0~(2^32-1)(unsigned int占4字节,32位机系统,如Visual C++)。unsigned ...

C语言 关于unsigned int声明函数的一个问题
这是C语言,你要先定义变量,才可以做其他操作,unsigned int的语句如果写到Dog_Food=1;语句下面,编译就会报错,syntax error near 'unsigned', 这个就是很明显的错误,你做了其他操作后才去定义变量,这样会报错。如果你是VC,然后文件不是.c结尾,他就是C++语言,不会报错 ...

关于c语言unsigned
unsigned本身是没有长度的,他是一个关键字,用来修饰类型的,所以你说的大小和unsigned没有关系,如:char ch 的大小是1个字节,unsigned char ch也是1个字节,这个大小只和类型有关,int在如果是32位机的话一般都是4个字节,所以无论是unsigned int i 还是 int i 都是4个字节,区别在于是否有...

(2)C语言中关于unsigned int的问题。
很高兴你能来信。首先确认一件事,因为现在大部分的系统中int型都是4个字节,所以在这里我也认为你的系统int型占有4个字节(请自己用sizeof函数确认)。如果是两个字节,那么int型的范围在(-32768--32767)unsigned在(0---65536)。再次,请找一本将计算机原理的书籍好好学习一下。结果原理是这样...

相似回答