相关疑难解决方法(0)

将负数分配给unsigned int?

在C编程语言中,unsigned int仅用于存储正值.但是,当我运行以下代码时:

unsigned int x = -12;
printf("%d", x);
Run Code Online (Sandbox Code Playgroud)

输出仍为-12.我认为应该打印出来:12,还是我误解了什么?

c

52
推荐指数
4
解决办法
9万
查看次数

C Unsigned int提供负值?

我有一个无符号整数但是当我使用%d打印出来时,有时会出现负值吗?

c int unsigned

5
推荐指数
2
解决办法
9435
查看次数

为什么printf显示unsigned int的负值?

可能重复:
带有负值的无符号长整数

我编写了一个内核模块,它可以中断任何系统调用,打印其当前的user_id和传递给系统调用函数的输入参数.其中一个是sys_ioctl(),如下所示:

asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd,unsigned long arg);
Run Code Online (Sandbox Code Playgroud)

这意味着所有输入参数都是无符号的int数.

但是当我打印输入参数时,我得到以下输出:

 fd=21, cmd=-1072143871 and arg=3202983648 
 fd=21, cmd=-1072143871 and arg=3202983648 
 fd=21, cmd=-1072143871 and arg=3202983648 
 ----------
Run Code Online (Sandbox Code Playgroud)

这是我的函数定义:

asmlinkage long our_sys_ioctl(unsigned int fd ,  unsigned int cmd , unsigned long arg)
{
    uid_t gtuid ;
    gtuid = getuid_call();
    printk ("our_sys_ioctl ---> uid = %d with fd=%i, cmd=%i and arg=%lu \n ", gtuid, fd, cmd, arg);
    return original_call_ioctl(fd , cmd , arg);
}
Run Code Online (Sandbox Code Playgroud)

知道为什么cmd值是负数,这些值是什么意思?

c linux system-calls linux-kernel

1
推荐指数
1
解决办法
4914
查看次数

标签 统计

c ×3

int ×1

linux ×1

linux-kernel ×1

system-calls ×1

unsigned ×1