#include <stdio.h>
int main(void)
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
Run Code Online (Sandbox Code Playgroud)
它打印False.为什么sizeof()不返回值if?
我在解决为什么输出在每种特定情况下都不同时遇到了问题.在示例代码a中,有一个我期望的变量提升和结果> 6,但在示例代码b中,结果是<= 6:
/* **Code a** */
puts("Code a\n");
unsigned int a = 6;
int b = -20;
( a+b > 6) ? puts("> 6\n") : puts("<= 6\n");
/* **Code b** */
puts("Code b:\n");
uint8_t a1 = 6;
int8_t b1 = -20;
( a1+b1 > 6) ? puts("> 6\n") : puts("<= 6\n");
Run Code Online (Sandbox Code Playgroud)
输出:
Code a
> 6
Code b:
<= 6
Run Code Online (Sandbox Code Playgroud) 我在这个网站上搜索了一个答案,发现许多对未签名/签名比较的回复,但是这个问题是只比较了无符号参数,但它仍然很有趣.
以下代码的问题在于第一个if-statment不会发生("hello"),而第二个("world")就是这样.我已经解释为在if-statment 内部进行的计算会生成一个负数但是保存到变量的结果完全相同的计算不会(即使结果被保存到有符号变量).
使用的编译器是gcc 4.4.
unsigned short u16_varHigh;
unsigned short u16_varLow;
unsigned short u16_Res1;
signed short s16_Res1;
u16_varHigh = 0xFFFF;
u16_varLow = 10;
u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
// Does not enter
if( (u16_varLow - u16_varHigh) > (unsigned short)5 )
{
printf( "hello" );
}
// Does enter
if( (unsigned short)(u16_varLow - u16_varHigh) > 5 )
{
printf( "world" …Run Code Online (Sandbox Code Playgroud) 当我在C中乘以两个无符号字符时,如下所示:
unsigned char a = 200;
unsigned char b = 200;
unsigned char c = a * b;
Run Code Online (Sandbox Code Playgroud)
然后我知道我会溢出,因此我得到(40'000模256).当我这样做:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = (int)a * (int)b;
Run Code Online (Sandbox Code Playgroud)
我会得到正确的结果40'000.但是,我不知道这会发生什么:
unsigned char a = 200;
unsigned char b = 200;
unsigned int c = a * b;
Run Code Online (Sandbox Code Playgroud)
我可以确定正确的事情发生了吗?这个编译器是否依赖?同样,我不知道做减法时会发生什么:
unsigned char a = 1;
unsigned char b = 2;
int c = a - b;
Run Code Online (Sandbox Code Playgroud)
当使"c"成为无符号字符时,我可能会得到255.当我使用这样的int时会发生什么?
我对以下代码感到困惑:
#include <stdio.h>
#include <stdint.h>
int main(int argc, char ** argv)
{
uint16_t a = 413;
uint16_t b = 64948;
fprintf(stdout, "%u\n", (a - b));
fprintf(stdout, "%u\n", ((uint16_t) (a - b)));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
返回:
$ gcc -Wall test.c -o test
$ ./test
4294902761
1001
$
Run Code Online (Sandbox Code Playgroud)
似乎表达式(a-b)具有类型uint32_t.我不明白为什么因为两个运算符都是uint16_t.
任何人都可以向我解释这个吗?
考虑一下C++程序的以下部分; 打印到控制台的值作为注释给出.
{ // case 1
unsigned int x = 10;
unsigned int y = 20;
std::cout << "u/u x - y: " << x-y << std::endl; // 4294967286
}
{ // case 2
int x = 10;
int y = 20;
std::cout << "s/s x - y: " << x-y << std::endl; // -10
}
{ // case 3
unsigned int x = 10;
int y = 20;
std::cout << "u/s x - y: " << x-y << std::endl; …Run Code Online (Sandbox Code Playgroud) 我试图检查收到的消息号是否在给定范围内.每次消息号增加时.如果我期待数字10,我接受任何号码为10+的消息.所以序列号为10到15.我使用的是unsigned int.因此,当预期数量为65532时,我可以接受65532 + 10(所以min = 65532和max = 5).如何检查我收到的号码是否在此范围内?
#include <stdio.h>
int main()
{
short int a;
char c;
printf("%d %d %d",sizeof(a),sizeof(c),sizeof(c+a));
}
Run Code Online (Sandbox Code Playgroud)
在这个sizeof a中,2字节大小的char是1字节但是我把它们加起来它给4字节.它在表达式中做了什么使其成为4
我有这个示例代码,用于将32位整数转换为ip地址.
#include <stdio.h>
int main()
{
unsigned int c ;
unsigned char* cptr = (unsigned char*)&c ;
while(1)
{
scanf("%d",&c) ;
printf("Integer value: %u\n",c);
printf("%u.%u.%u.%u \n",*cptr, *(cptr+1), *(cptr+2), *(cptr+3) );
}
}
Run Code Online (Sandbox Code Playgroud)
此代码为输入提供了错误的输出2249459722.但当我更换
scanf("%d",&c) ;Run Code Online (Sandbox Code Playgroud) 通过 scanf("%u",&c) ;Run Code Online (Sandbox Code Playgroud)
输出结果是正确的.
PS:我知道inet_ntop和inet_pton.
我期待的答案不仅仅是建议那些答案.
(k < m ? k++ : m = k)
此特定表达式给出了编译时错误,表示需要左值.问题在于k++.无法理解此表达式中的错误.
我使用32位变量将4个8位值存储到一个32位值中.
32_bit_buf[0]= cmd[9]<<16 | cmd[10]<<8| cmd[11] <<0;
Run Code Online (Sandbox Code Playgroud)
cmd 是带有数据的unsigned char类型
cmd [9]=AA
cmd[10]=BB
cmd[11]=CC
Run Code Online (Sandbox Code Playgroud)
但是,当打印32位变量时,我得到了0xFFFFBBCC.
架构 - 8位AVR Xmega
语言-C
任何人都可以找出我出错的地方.
我有个问题.在此程序中,变量x应设置为0x10000,但在两个操作中结果为0.
这不是主程序,而是查找错误原因的测试.我目前正在使用十六进制输入制作64位乘法器.我使用Keil和Proteus进行了16位乘法运算
int main() {
unsigned long int x = 0;
x = 0x8000 * 0x2;
x = 0x8000 + 0x8000;
return 0;
}
Run Code Online (Sandbox Code Playgroud) c ×12
c++ ×2
char ×2
int ×2
sizeof ×2
16-bit ×1
avr ×1
casting ×1
comparison ×1
endianness ×1
if-statement ×1
ip-address ×1
overflow ×1
scanf ×1
short ×1
turbo-c ×1
types ×1
unsigned ×1