指針,或者說pointer是一串指向某個內存地址的字符串,所謂指向是指這串字符串的內容是內存地址的值
成都創新互聯公司-云計算及IDC服務提供商,涵蓋公有云、IDC機房租用、四川雅安電信機房、等保安全、私有云建設等企業級互聯網基礎服務,咨詢電話:18980820575
表示取地址,例如你有一個變量a那么a就是變量a在內存中的地址,對于golang,指針也是有類型的,比如如果a是一個string那么a是一個string的指針類型,在go里面叫string
所以你看到b := a,a,b是兩個不同的變量,a是string類型,b是string類型,你用fmt去打印b,你會發現它是一串內存地址,而非a的值
所以為了拿到a的值,有個操作*,用來取出指針對應內存地址里存的值,所以當你fmt打印一下*b它會跟a一模一樣
很多語言都是采用 ~ 作為按位取反運算符,Go 里面采用的是 ^ 。
如果作為二元運算符,^ 表示按位異或,即:對應位相同為 0,相異為 1。
操作符 ^,按位置零,例如:z = x ^ y,表示如果 y 中的 bit 位為 1,則 z 對應 bit 位為 0,否則 z 對應 bit 位等于 x 中相應的 bit 位的值。
對于有符號的整數來說,是按照補碼進行取反操作的(快速計算方法:對數 a 取反,結果為 -(a+1) ),對于無符號整數來說就是按位取反
計算過程
以3為例? 3在內存中補碼為 0*** 0011
取反? ? ? ? ? ? 1*** 1100
-1操作? ? ? ? ? 1*** 1011
除符號位取反? ? 1*** 0100 結果為-4
-------------------------------------------
以9為例 9在內存中補碼為 0*** 1001
取反? ? ? ? ? ? 1*** 0110
-1操作? ? ? ? ? 1*** 0101
除符號位取反? ? 1*** 1010 結果為-10
-------------------------------------------
以-5為例 -5在內存中為的補碼為 1*** 1011
為什么呢
-5源碼? ? ? ? ? 1*** 0101
除符號取反? ? ? 1*** 1010
+1操作? ? ? ? ? 1*** 1011
-------------------------------------------
那么-5取反怎么算
補碼 1***1011取反為 0***0100
因為符號位為0,所以是正數了,正數的補碼反碼源碼都是一個,所以是4
===================================
再看-1
-1源碼? ? ? ? ? 1*** 0001
除符號取反? ? ? 1*** 1110
+1操作? ? ? ? ? 1*** 1111
補碼 1*** 1111 取反為 0*** 0000
因為符號位為0,所以是正數了,正數的補碼反碼源碼都是一個,所以是0
go語言取反輸出的例子看這里
tips: *號,可以指向指針類型內存地址上的值,號,可以獲取值類型的內存地址
每一個變量都有內存地址,可以通過變量來操作內存地址中的值,即內存的大小
go語言中獲取變量的內存地址方法:通過 符號可以獲取變量的地址
定義:普通變量存儲的是對應類型的值,這些類型就叫值類型
變量b,在內存中的地址為:0x1040a124,在這個內存地址上存儲的值為:156
定義:指針類型的變量存儲的是?個地址,所以?叫指針類型或引?類型
b 是值類型,它指向的是內存地址上的值
a是指針類型,它指向的是b的內存地址
指針類型定義,語法: var 變量名 *類型
指針類型在定義完成后,默認為空地址,即空指針(nil)
在定義好指針變量后,可以通過***** 符號可以獲取指針變量指向的變量
在這里的 *a 等價于 b,通過修改 *a ,最終修改的是值類型b的值
這里a,d是值類型,b,c是指針類型
d就相當于把a內存地址上值,在內存中從新開辟了一塊空間存儲,d和a互不影響
b,c相當于指向了a的內存地址,當使用*號引用出內存地址上的變量上,修改值得,a的值也會跟著改變
分享題目:go語言中的符號 go語言標識符
文章起源:http://vcdvsql.cn/article36/dopgjsg.html
成都網站建設公司_創新互聯,為您提供網站排名、手機網站建設、關鍵詞優化、App開發、商城網站、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯