0xffffffff在不同情况下的输出[通俗易懂]

0xffffffff在不同情况下的输出[通俗易懂]问题起源于next_random=next_random*(unsignedlonglong)25214903917+11;k1=(next_random&0xFFFF):保留next_random的低16位(最大65535);&0xFFFF引起了我的兴趣,发现这个的操作是取低16位。然后我百度了下。发现。low16=(unsigneds…

大家好,又见面了,我是你们的朋友全栈君。

问题起源于

next_random = next_random * (unsigned long long)25214903917 + 11;
k1 = (next_random & 0xFFFF):保留next_random的低16位(最大65535);

& 0xFFFF引起了我的兴趣,发现这个的操作是取低16位。然后我百度了下。
发现。

low16 = (unsigned short ) (number>>16); 
high16 = (unsigned short) (number&0xFFFF)

上式整体就是将number的低4字节分成两半,其中高的两字节存入low16,低的存入high16。
& 0xFFFF 是按位进行与计算,而0xffff转化为二进制为1111 1111 1111 1111进行计算后实际是取得number的低16位的值。
然后补充点关于0xffffffff与-1的关系。先看下面代码。

int main()
{ 
   
	unsigned int uint;
	int i = -1;
	uint = i;
	printf("%x %d\n", uint, i);
    //输出ffffffff -1
	uint = 0xffffffff;
	i = uint;
	printf("%x %d\n", uint, i);
    //输出ffffffff -1
    int j = -1;
    printf("%x\n", (~j));
    //输出0
    int k = 1;
    printf("%x\n", (~k));
    //输出0xfffffffe
    char c = 1;
    printf("%d\n", (~c));
    //输出-2

这里其实i在内存中是有符号的,我们知道内存中存储是补码,如果按uint读取,都是整数补码与原码相同。如果按照i读取,内存中的数值为补码表示,所以0xFFFFFFFF是一个负数的补码。负数从补码求原码,最高符号位不变,保持 1, 其余各位求反,末尾加1,也就是 0xFFFFFFFF,二进制为:11111111 11111111 11111111 11111111

->  10000000 00000000 00000000 00000000
->  10000000 00000000 00000000 00000001

再来看一个例子练习,~(-1),先将-1求补码,即1111 1111 1111 1111,然后取反0000 0000 0000 0000,即为0。

#include <stdio.h>
 
int main()
{ 
   
	unsigned int uint;
	int i = -1;
	uint = i;
	printf("%x %d\n", uint, i);
    //输出ffffffff -1
	uint = 0xffffffff;
	i = uint;
	printf("%x %d\n", uint, i);
    //输出ffffffff -1
    int j = -1;
    printf("%x\n", (~j));
    //输出0
    int k = 1;
    printf("%x\n", (~k));
    //输出0xfffffffe
    char c = 1;
    printf("%d\n", (~c));
    //输出-2

再附一个取反运算,这里要注意的是,数据的存储是反码格式,所以如果是负数的话,我们先要计算反码再取反。

int main()
{ 
   
    unsigned int uint;
    int i = -1;
    uint = i;
    printf("%x %d\n", uint, i);
    //输出ffffffff -1
    uint = 0xffffffff;
    i = uint;
    printf("%x %d\n", uint, i);
    //输出ffffffff -1
    int j = -1;
    printf("%x\n", (~j));
    //输出0
    int k = 1;
    printf("%d\n", (~k));
    //输出0xfffffffe
    char c = 1;
    printf("%d\n", (~c));
    printf("%x\n",(~c));
    //输出-2
}

参考
关于0xffffffff 到底是什么意思?
0xffffffff是多少?
C语言之-1与0xffffffff

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145326.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月17日 下午5:40
下一篇 2022年5月17日 下午6:00


相关推荐

  • postgresql主从复制配置「建议收藏」

    postgresql主从复制配置「建议收藏」postgresql主从复制是一种高可用解决方案,可以实现读写分离。postgresql主从复制是基于xlog来实现的,主库开启日志功能,从库根据主库xlog来完成数据的同步。主从复需要注意的地方:启动从库之前,不能执行初始化。 启动从库之前,需要通过base_backup从主服务器上同步配置与数据。 启动从库之前,需要对同步之后的配置文件进行修改。 启动从库之前,需要设置一个恢复的…

    2022年8月13日
    10
  • 电气设计心得体会_原理图设计规范

    电气设计心得体会_原理图设计规范本博客将简述中兴通讯股份有限公司在原理图设计中需要注意的一些事项,其中包含了中兴设计开发部积累的大量硬件开发知识和经验,可以作为学习使用。硬件工程师可以学习并掌握检查条目的内容以及对条目的详细说明,学习部门经验。

    2025年9月18日
    7
  • pstack 与 strace[通俗易懂]

    pstack 与 strace[通俗易懂]strace  strace是可以记录程序系统调用的一个工具,它可以记录该程序系统调用的各个延时情况。-c统计每一系统调用的所执行的时间,次数和出错的次数等.-d输出strace关于标准错误的调试信息.-f跟踪由fork调用所产生的子进程.-ff如果提供-ofilename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.-F尝试跟踪vf…

    2025年11月17日
    6
  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

    2022年8月11日
    7
  • redis安装部署linux集群_redis安装配置

    redis安装部署linux集群_redis安装配置一、下载安装包首先下载redis安装包,下载地址wgethttps://download.redis.io/releases/redis-6.2.0.tar.gztzr-zxvfredis-6.2.0.tar.gz二、编译安装1、解压redis安装包,将redis安装至指定目录。makeinstallprefix=/user/local/redis/若编译错误,可以使用makeclean清空编译结果2、将解压目录下的redis.conf文件拷贝至安装目录的bin文件夹下cp

    2022年10月5日
    5
  • 什么是弱网测试?为什么要进行弱网测试?怎么进行弱网测试?「建议收藏」

    什么是弱网测试?由于处在移动互联网盛行的时代,网络形态除了有线连接外,还有2G/3G/4G/Wifi/5G等多种手机网络连接方式。首先额外补充一些5G的知识;2分钟了解什么是5G。在前不久结束的MWC2018上,5G成了全球的一个热门话题,而国内对5G的关注度也是异常地高。实际上,与2G、3G、4G相比,我国在5G方面的布局并不晚于其他国家;而且中国三大运营商在中国5…

    2022年4月8日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号