go语言int负数 golang int int32( 二 )


正数的反码跟原码不变 , 而负数的反码除符号位外其go语言int负数他位取反
-1的原码是1000 0001,所以反码为1111 1110,最后在加1即1111 1111
如果二进制1000 0001是一个有符号位的8位数据,那么最高位为符号位,1为负数0为正数
那反过来二进制1000 0001表示成十进制就是减1在取反,
1000 0001 - 1=1000 0000
除符号位取反后为1111 1111即-127
golang 正负数取反想要知道取反计算过程,首先搞懂“原码“,“反码”,“补码”,“取反” 。
0变1,1变0
原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值 。原码表示法在最高位为符号:正数该位为0 , 负数该位为1 , 原码又称带符号的绝对值 。看整数9及-9的原码如下:
9的原码:0000 1001
-9的原码: 1000 1001
重点:对于源码,绝对值相等的正数和负数只有符号位不同 。
反码通常是用来由原码求补码或者由补码求原码的过渡码 。正数的反码就是其原码,负数的反码就是将原码除符号位以外每位取反(0变1,1变0) 。例如:
9的反码:0000 1001
-9的反码:1111 0110
在计算机系统中 , 数值一律用补码来表示和存储 。正数的原码就是其补码 。负数的补码是其反码+1.例如:
9的补码:0000 1001
-9的补码:1111 0111
正整数的原码、反码、补码都是一样的 。负数的反码是除符号位其他每一位取反,负数的补码是其反码+1
首先明确一个概念,由于在计算机中二进制都是以其补码形式存放在内存中的 。所以要知道 ^9 就是对 9 的补码取反,也就是说无论是整数还是负数对其取反都是对其补码取反 。
正数9:
原码为: 0000 1001
反码为: 0000 1001
补码为: 0000 1001
1. 取反结果=负数补码 :0000 1001 --- (取反) 1111 0110
注:由于 ^ 位取反操作符,对于符号位也会取反 所以这里得到一个负数的补码,想要计算其真实的值 。还需要将其转换成原码 。
2. 得反码:1111 0110-1=1111 0101
补码 = 反码 + 1 (反推) 反码 = 补码 - 1
3. 得原码 1111 0101 -- 1111 1010 = -10
原码=反码取反
负数-9:
原码为: 1111 1001
反码为: 1111 0110
补码为: 1111 0111
1. 取反结果=正数补码 1111 0111 ---- 0000 1000
2. 正数原码 = 反码 = 补码 = 0000 1000 = 8
go语言中数组使用的注意事项和细节1、数组是多个 相同类型 go语言int负数的数据go语言int负数的组合,一个数组一旦声明/定义go语言int负数了,其 长度是固定的,不能动态变化。
2、var arr []int这时arr就是一个slice 切片。
3、数组中的元素可以是任何数据类型 , 包括值类型和引用类型,但是 不能混用。
4、数组创建后,如果没有赋值,有默认值如下go语言int负数:
数值类型数组:默认值为 0
字符串数组:默认值为 ""
bool数组:默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的 。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型  , 在默认情况下是 值传递 ,因此会进行值拷贝 。数组间不会相互影响 。
9、如想在其go语言int负数他函数中去修改原来的数组,可以使用 引用传递 (指针方式) 。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度 , 看以下案例:

推荐阅读